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

对Javascript文件进行版本控制以防止不必要的缓存清除,javascript,browser,Javascript,Browser,我将所有客户端JS文件的版本设置为“/JS/myfile.JS?v=3903948”,这样我的客户端就不需要清除浏览器缓存以确保获得更新的文件。但每次我推送一个更新,毫无疑问,至少有一个人遇到了一个问题,他们正在运行旧版本,并得到某种错误。我曾经认为,这只是因为他们在发布时已经出现在页面上,只需要重新加载浏览器,但今天发生在我身上的情况是,我以前肯定没有出现在页面上。我浏览了现场,运行的是旧代码。我需要在该页面上进行浏览器刷新以获取新文件 这是什么原因造成的 PS我在Win7上使用的是Chrom

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

这是什么原因造成的


PS我在Win7上使用的是Chrome,但我以前在所有不同的浏览器上都看到过客户端报告这一点

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


您可以使用以下工具检查导线上发生了什么

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

我同意jfriend00的观点,即网页本身被兑现,因此请求使用旧的javascript版本

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


编辑:例如,请参见

我向服务器发出一个快速AJAX请求,请求服务器提供它期望的版本,然后在客户端脚本旧时强制服务器刷新页面。

是否使用应用程序缓存?有趣的想法,但在这种情况下,无法缓存主网页。再三考虑。。阅读我对托马斯的回应Voracek@DavidDimitriov-主页“无法缓存”是什么意思?你是如何知道的,或者你是如何保证的?新版本的页面不可能请求旧版本的JS文件,所以很明显,这是某个地方的缓存问题。问题是如果不在哪里?我开始认为这就是问题所在。我需要仔细研究这两种情况中的任何一种,我觉得我自己在今天之前至少会经历一次。看起来更像是浏览器本身没有请求引用JS文件的新html页面,尽管这在技术上是不允许的。但我不知道在什么情况下会发生这种情况