我们目前正在进行私人测试,因此仍然在进行相当快速的更改,尽管显然随着使用量开始增加,我们将放慢这一过程.话虽这么说,我们遇到的一个问题是,在我们用新的JavaScript文件推出更新之后,客户端浏览器仍然使用文件的缓存版本,但他们看不到更新.显然,在支持调用上,我们可以简单地通知他们进行ctrlF5刷新以确保他们从服务器获取最新文件,但最好在此之前处理它.
我们当前的想法是简单地将版本号附加到JavaScript文件的名称上,然后在进行更改时,增加脚本上的版本并更新所有引用.这绝对可以完成工作,但更新每个版本的引用可能会变得很麻烦.
我确信我们不是第一个处理这个问题的人,我想我会把它扔给社区.在更新代码时,如何确保客户更新缓存?如果您使用上述方法,您是否正在使用简化更改的流程?
据我所知,一个常见的解决方案是?
在脚本的src链接中添加一个.
例如:
我假设在这一点上,没有比find-replace更好的方法来增加所有脚本标签中的这些"版本号"?
你可能有一个版本控制系统为你做这个吗?大多数版本控制系统都有办法在登记时自动注入修订号.
它看起来像这样:
当然,总会有像这样的更好的解决方案.
将当前时间附加到URL确实是一种常见的解决方案.但是,如果需要,您还可以在Web服务器级别进行管理.可以将服务器配置为为javascript文件发送不同的HTTP标头.
例如,要强制将文件缓存不超过1天,您将发送:
Cache-Control: max-age=86400, must-revalidate
对于测试版,如果您想强制用户始终获取最新信息,您可以使用:
Cache-Control: no-cache, must-revalidate
Google Page-Speed:不要在URL中包含静态资源的查询字符串.大多数代理,最着名的是Squid从版本3.0开始,不会使用"?"来缓存资源.即使响应中存在Cache-control:public标头,也会在其URL中显示.要为这些资源启用代理缓存,请从对静态资源的引用中删除查询字符串,而是将参数编码为文件名本身.
在这种情况下,你可以包含版本为URL例如:http://abc.com/ V1.2 /script.js和使用Apache的mod_rewrite重定向链接http://abc.com/script.js.更改版本时,客户端浏览器将更新新文件.
此用法已被删除:https: //developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache
这个答案仅晚了6年,但我在很多地方都没有看到这个答案...... HTML5引入了用于解决这个问题的Application Cache.我发现我写的新服务器代码正在崩溃存储在人们浏览器中的旧javascript,所以我想找到一种方法来使他们的javascript过期.使用如下所示的清单文件:
CACHE MANIFEST # Aug 14, 2014 /mycode.js NETWORK: *
每次希望用户更新其缓存时,都会生成带有新时间戳的文件.作为旁注,如果你添加它,浏览器将不会重新加载(即使用户刷新页面),直到清单告诉它.
如何将filesize添加为加载参数?
因此,每次更新文件时,"filever"参数都会更改.
更新文件和更新结果的文件大小相同时怎么样?有什么可能性?
并非所有浏览器都使用"?"缓存文件 在里面.我做了什么来确保它尽可能地被缓存,我在文件名中包含了该版本.
所以不是stuff.js?123
,我做了stuff_123.js
我用mod_redirect
(我认为)在apache have stuff_*.js
中去stuff.js
对于ASP.NET页面,我使用以下内容
之前
之后(强制重装)
添加DateTime.Now.Ticks非常有效.