对Javascript文件进行版本控制以防止不必要的缓存清除

时间:2011-09-12 21:22:08

标签: javascript browser

我将所有客户端JS文件(例如“/js/myfile.js?v=3903948”)版本化,以便我的客户端不需要清除其浏览器缓存以确保获取更新的文件。但每次推送更新时,至少有一个人遇到问题,他们运行旧版本并遇到某种错误。我曾经认为这只是他们已经在发布期间已经在页面上并且只需要重新加载浏览器,但今天发生在我之前,当时我肯定不在页面上。我浏览了实时网站并运行了旧代码。我需要在该页面上进行浏览器刷新以获取新文件。

导致这种情况的原因是什么?

PS我在Win7上使用Chrome,但我之前看到客户在所有不同的浏览器上报告过这个问题。

4 个答案:

答案 0 :(得分:2)

如果您的主网页也可以被缓存,那么该页面的旧版本可以请求旧版本的JS文件。如果实际引用JS文件的页面无法缓存或缓存时间非常短,则JS文件版本控制效果最佳。

答案 1 :(得分:1)

我同意jfriend00关于网页本身被兑现并因此请求旧的javascript版本。

为防止出现这种情况,您可以通过ajax(Post)请求加载javascript文件,或者请求服务器下载准确的(最新)版本号,或者请求javascript本身并插入它,例如:在页面的头部。

修改:例如参见here

答案 2 :(得分:1)

我向服务器发出一个快速的AJAX请求,要求它们拥有它所拥有的版本,然后强制它们刷新页面,如果客户端的脚本是旧的。

答案 3 :(得分:0)

似乎代理或某个负载均衡器正在提供旧内容而不是新内容。另请检查IIS / Web服务器设置如何缓存/过期这些文件。

您可以使用Fiddler等工具查看线路上发生的情况。