控制Javascript文件的版本以防止不必要的缓存清理
Versioning Javascript Files to Prevent Unnecessary Cache Clearing
我版本我所有的客户端JS文件,如"/JS/myfile.js?V =3903948",这样我的客户端就不需要清除浏览器缓存来确保他们获得更新的文件。但每次我推送一个更新,无一例外,至少有一个人在运行旧版本时遇到了问题,并得到了某种错误。我曾经认为这只是他们在发布时已经在页面上,只需要重新加载浏览器,但今天这种情况发生在我身上,当时我肯定没有在页面上。我浏览到现场,并运行旧代码。我需要在该页面上刷新浏览器以获得新文件。
是什么原因导致的?
PS我在Win7上使用Chrome,但我见过客户在所有不同的浏览器上报告这个问题。
如果你的主网页也可以被缓存,那么该页面的旧版本可以请求旧版本的JS文件。如果实际引用JS文件的页面不能被缓存或缓存时间很短,则JS文件版本控制效果最好。
我同意jfriend00关于网页本身被兑现从而请求旧javascript版本的看法。
为了防止这种情况,你可以通过ajax (Post)请求加载javascript文件,要么请求服务器下载准确的(最新的)版本号,要么请求javascript本身并插入它,例如在页面的头部。
编辑:参见此处的示例
我向服务器发出一个快速的AJAX请求,以获取它期望的版本,然后如果客户端的脚本是旧的,则强制它们刷新页面。
似乎代理或某些负载平衡器正在提供旧内容而不是新内容。同时检查IIS/webserver设置这些文件是如何缓存/过期的。
你可以用Fiddler之类的工具检查电线上发生了什么。
相关文章:
- 骨干模型默认值-todos.js示例中不必要的代码
- RadTreeView在IE11不必要的触发事件中不起作用
- “期望赋值或函数调用,而是看到了表达式.” - 不必要的控制台.log
- 避免在 Angular.js 中对绑定值进行不必要的评估
- 避免在视差滚动效果中对图像进行不必要的缩放
- Redux防止不必要的渲染
- Javascript - 预填充 cookie 信息,以在指向外部站点的链接上交叉传递不必要的登录页面
- AngularJS路由:URL中不必要的参数
- 简化这个不必要的JavaScript
- 如何在使用 Sentry 时避免来自第三方扩展的不必要的崩溃报告
- 单击时播放音频时出现不必要的延迟
- 让吉森忽略一些不必要的细节
- JSLint 错误:“中断后不必要的其他”
- 让实例化的 javascript 函数查找自己的名称是不好的还是不必要的
- 如何从编译的生态模板中删除不必要的空格
- 更改清单时 Html5 缓存不更新
- 带有不必要括号的调车场算法
- ngSrc 是在 ngIf 导致不必要的 http 请求之前计算的
- 面板在 ExtJs 中占用不必要的巨大空间
- 控制Javascript文件的版本以防止不必要的缓存清理