Chrome没有更新缓存(javascript文件)

时间:2017-01-27 20:07:44

标签: javascript google-chrome

就像过去5 - 6年一样,我设计了所有的Web项目,因此所有前端资源(如javascript文件)都尽可能少地从服务器中获取

所以我在网络服务器上使用了expires标题,并且有效期为1年。在前端,我在查询字符串中添加了这个版本

<script src="my_js_file.js?v=323"></script>

但是最近我经历过Goole Chrome对此变得更加严格,因此如果您不更改查询字符串中的版本?v=4939,则必须清除浏览器缓存以更新您的javascript文件}。但有时看起来它不会总是更新缓存,即使版本是由一个添加

这是Chrome中的错误还是新的&#34;功能&#34;使互联网更快&#34;?如果是,这是一个糟糕的功能,不允许您控制您的网站版本

更新

在开发网站时,这对我来说不是问题,但对于网站的用户来说这不是问题。新版本发布时缓存不会更新

4 个答案:

答案 0 :(得分:0)

Chrome在最近的版本中确实更加积极地进行了缓存。

随着开发的devtools,刷新工作(过去几次清除)。 Chrome似乎记得所有,devtools已关闭。

答案 1 :(得分:0)

由于某些浏览器并未确认将查询字符串更改为新文件,请改为使用

<script src="my_js_file.3.2.3.js"></script>

答案 2 :(得分:0)

出于测试/调试的目的,CTRL+F5强制执行“硬刷新”以清除缓存。为了您的用户,您需要更改版本号,如@LGSon所说,但这对于调试来说是一个巨大的痛苦。

答案 3 :(得分:0)

在没有官方确认或可复制示例证明相反的情况下,我假设上面comment中已经声明的内容

  

如果您要更改查询字符串,它是一个不同的网址-浏览器无法缓存尚未访问过的网址

所以我会寻找另一个根本原因。现在,请注意OP在说什么:

  

这对我来说不是问题,但对网站用户而言

与此问题的my experience相符:实际上是部署问题。 如果发生这种情况,可能会发生:

  1. 带有伪造参数(版本号,哈希等)的页面首先移至生产环境,而.js脚本的新版本被延迟(几分钟)
  2. 平均时间 一些用户浏览网页,因此他们的浏览器在参数器 still中将 new 版本号缓存 指向 old .js脚本
  3. 当新的.js在生产中最终被覆盖时,为时已晚,因为那些用户浏览器已经记下了新的调用。

解决方案是确保新的.js在调用它的页面的更新版本之前 部署到生产环境中。


顺便说一句,请注意-正如@LGSon的answer和其他this one这样的注释中所指出-查询参数可能会导致缓存 miss ,但这是相反问题,而不是问题中描述的问题,即缓存中的陈旧数据