论坛首页 Java企业应用论坛

资源文件的时间戳设计

浏览 2803 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-16   最后修改:2012-04-18

在互联网应用中,为了提高用户的浏览速度,开发人员需要让浏览器准确的缓存资源文件,如JS,CSS和图片文件。所以需要在使用JS和CSS文件时加一个时间戳。因为如果文件名一样,但时间戳不一样,浏览器会认为是不同的文件而重新下载,不使用缓存,如hello.js?V=20120212

 

时间戳的设计方案

 

 

序号 方案 使用场景 优点 缺点
1 不使用时间戳 发布频率非常高,如每日都有多次发布 不需要实现时间戳管理 没有缓存,影响用户访问速度。
2 每次项目发布更新所有静态资源的时间戳 发布频率比较低,如每月一次发布 实现比较简单 每次项目发布,用户需要更新所有静态资源的缓存。
3 发布时候,更新修改过静态资源的时间戳 发布频率不是非常频繁。 为浏览器提供了非常准确的缓存 实现比较复杂,有很多问题需要解决
4 使用apache的缓存配置 发布频率较高,如每周几次 不需要实现时间戳 适用场景较少。

 

当然方案3是最好的解决方案,通过SVN接口找到本次项目修改的文件也不难,但是修改时间戳时有几个问题比较麻烦。

  1. 如果用户使用JS来导入JS,这里面的JS文件也需要更新,那么需要解析JS文件。
  2. 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 "

 

   发表时间:2012-04-17  

好文,没人讨论啊,我来支持下。

 

第三种方式 我觉得可以这样来实现:

1、浏览器 将 Last-Modified 发到服务器

2、服务器专门写个控制器 来接受 js/css请求, 在控制器设置时间戳(当有修改就重新设置),如果浏览器发来的时间戳 和我们设置的时间戳 匹配 发回304,否则重新返回新数据即可。

 

这样 就形成集中访问点 统一管理 Last-Modified

 

 

还可以使用ETag实现,但它需要生成内容的摘要,觉得还是 Last-Modified比较好点。

0 请登录后投票
   发表时间:2012-04-18  
jinnianshilongnian 写道

好文,没人讨论啊,我来支持下。

 

第三种方式 我觉得可以这样来实现:

1、浏览器 将 Last-Modified 发到服务器

2、服务器专门写个控制器 来接受 js/css请求, 在控制器设置时间戳(当有修改就重新设置),如果浏览器发来的时间戳 和我们设置的时间戳 匹配 发回304,否则重新返回新数据即可。

 

这样 就形成集中访问点 统一管理 Last-Modified

 

 

还可以使用ETag实现,但它需要生成内容的摘要,觉得还是 Last-Modified比较好点。


    jinnianshilongnian 的想法非常好。有时间的话,我仔细研究下,不知道你们现在是否有实现呢?

0 请登录后投票
   发表时间:2012-04-18   最后修改:2012-04-18
fantasy 写道
jinnianshilongnian 写道

好文,没人讨论啊,我来支持下。

 

第三种方式 我觉得可以这样来实现:

1、浏览器 将 Last-Modified 发到服务器

2、服务器专门写个控制器 来接受 js/css请求, 在控制器设置时间戳(当有修改就重新设置),如果浏览器发来的时间戳 和我们设置的时间戳 匹配 发回304,否则重新返回新数据即可。

 

这样 就形成集中访问点 统一管理 Last-Modified

 

 

还可以使用ETag实现,但它需要生成内容的摘要,觉得还是 Last-Modified比较好点。


    jinnianshilongnian 的想法非常好。有时间的话,我仔细研究下,不知道你们现在是否有实现呢?

 

没有实现,不过最近在写SpringMVC的东西 里边有Last-Modified的支持,才想到这种方式。

 

0 请登录后投票
   发表时间:2012-04-18  
进来学习下,百度了,有说改文件名,但估计被LZ排除了...
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics