在互联网应用中,为了提高用户的浏览速度,开发人员需要让浏览器准确的缓存资源文件,如JS,CSS和图片文件。所以需要在使用JS和CSS文件时加一个时间戳。因为如果文件名一样,但时间戳不一样,浏览器会认为是不同的文件而重新下载,不使用缓存,如hello.js?V=20120212
时间戳的设计方案
方案 | 使用场景 | 优点 | 缺点 |
不使用时间戳 | 发布频率非常高,如每日都有多次发布 | 不需要实现时间戳管理 | 没有缓存,影响用户访问速度。 |
每次项目发布更新所有静态资源的时间戳 | 发布频率比较低,如每月一次发布 | 实现比较简单 | 每次项目发布,用户需要更新所有静态资源的缓存。 |
发布时候,只更新修改过静态资源的时间戳 | 发布频率不是非常频繁。 | 为浏览器提供了非常准确的缓存 | 实现比较复杂,有很多问题需要解决 |
使用apache的缓存配置 | 发布频率较高,如每周几次 | 不需要实现时间戳 | 适用场景较少。 |
当然方案3是最好的解决方案,通过SVN接口找到本次项目修改的文件也不难,但是修改时间戳时有几个问题比较麻烦。
- 如果用户使用JS来导入JS,这里面的JS文件也需要更新,那么需要解析JS文件。
- CSS文件里引用了图片,需要更新图片的时间戳,那么需要解析CSS文件。
使用apache的缓存配置。设置文件的缓存周期为1天。
ExpiresActive on #缓存1天。 ExpiresBytype text/css "access plus 1 days " ExpiresByType application/x-javascript "access plus 1 days " ExpiresByType image/jpeg "access plus 1 days " Expiresbytype image/gif "access plus 1 days "