控制Javascript文件的版本以防止不必要的缓存清理

Versioning Javascript Files to Prevent Unnecessary Cache Clearing

本文关键字:缓存 不必要 Javascript 文件 版本 控制      更新时间:2023-09-26

我版本我所有的客户端JS文件,如"/JS/myfile.js?V =3903948",这样我的客户端就不需要清除浏览器缓存来确保他们获得更新的文件。但每次我推送一个更新,无一例外,至少有一个人在运行旧版本时遇到了问题,并得到了某种错误。我曾经认为这只是他们在发布时已经在页面上,只需要重新加载浏览器,但今天这种情况发生在我身上,当时我肯定没有在页面上。我浏览到现场,并运行旧代码。我需要在该页面上刷新浏览器以获得新文件。

是什么原因导致的?

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

如果你的主网页也可以被缓存,那么该页面的旧版本可以请求旧版本的JS文件。如果实际引用JS文件的页面不能被缓存或缓存时间很短,则JS文件版本控制效果最好。

我同意jfriend00关于网页本身被兑现从而请求旧javascript版本的看法。

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

编辑:参见此处的示例

我向服务器发出一个快速的AJAX请求,以获取它期望的版本,然后如果客户端的脚本是旧的,则强制它们刷新页面。

似乎代理或某些负载平衡器正在提供旧内容而不是新内容。同时检查IIS/webserver设置这些文件是如何缓存/过期的。

你可以用Fiddler之类的工具检查电线上发生了什么。