2011-11-22 47 views
15

如果我决定使用javascript或css文件的last_modified_time,并在修改文件时使用它的unix时间戳作为名称中的关键字来缓存高速缓存。 以下两种做法有什么区别? 文件名是:my_script.js和时间戳是:1321951817使用Javascript版本来避免缓存,这些做法有所不同?

1 /文件被列为: <script type="text/javascript" src="http://example.com/js/my_script.js?v=1321951817"></script> 因此,查询字符串参数创建一个新的缓存每次的v改变。

2 /文件被包括作为: <script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script> 与每次修改的文件名改变,则重写规则删除时间戳和点所请求的URL,以my_script.js

3/UPDATE:ONE多个方法根据回答BELOW:文件被重新命名并且被包括为: <script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script> 文件名被改变并且使用NO REWRITE RULE。

问题:这两种技术本质上是相同的,还是使用查询字符串参数而不是直接文件名有什么优点/缺点。

+1

您也可以使用方法2),而不使用文件名:'http:// example.com/v-1321951817/js/my_script.js'。 – user123444555621

回答

22

使用更新的查询字符串是一个不好的解决方案。看看史蒂夫·苏德斯对此有何评论:http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

理想的方法是重命名文件本身。 有些人更喜欢使用上次修改日期的时间戳,我认为这是一个问题。

在现代网站开发中,您确实需要尽可能优化您的网页,这意味着将css和javascript结合到单个文件中,并将其完成。 这意味着你在你的过程中引入了一个构建步骤,并且文件的最后修改时间总是在你最后的构建中。如果您将其设置为您的文件名称,那么您实际上会一直在破坏用户缓存,有时候您不需要。

我建议将文件重命名为md5的内容总和。这样,您可以随时进行新建,但文件名只会在内容发生更改时才会更改。这使您的文件名称成为内容的标识符。使用这个,你可以在你所有的静态内容上设置一个远期的过期标题,并且不再担心它。

我可以推荐使用这个构建系统,因为这个工作流程会变得很无聊。 我的公司刚刚开源,很多其他优化您的网页的东西都是这样做的:https://github.com/One-com/assetgraph-builder 还有很多其他的构建工具可以做到这一点。环顾四周,找到最适合您的开发设置的一个。

+0

“理想的方法是重命名文件本身。”为什么这会比重写规则更好? – user123444555621

+3

不使用时间戳的另一个原因是,如果您要部署到多个服务器,最后修改日期可能会更改。使用该文件的MD5将确保它的一致性,无论您部署到何处或多少位置。 – TimE

6

你说的是你自己:在第二个例子中,你正在使用一个重写规则,它用正则表达式检查你正在加载的每一页。

第一个只是愚弄浏览器认为这是一个不同的文件。所以第一个是要走的路。

+1

我同意,第一个选项是要走的路。 – kamui

+0

@baklap同意你的观点。但是,我的版本控制脚本将文件重命名,并且不使用重写规则。那有什么更好? – DhruvPathak