【发布时间】:2018-01-31 09:56:28
【问题描述】:
首先,我在网上找到了一些资源here和here说的是同一件事:
对于正常/软重新加载,浏览器将重新验证缓存,检查文件是否被修改。
我在 Chrome 上进行了测试。我有一个网页index.html,它在body 的末尾加载了一些javascript 文件。当点击刷新按钮(软/正常)时,我从网络面板看到index.html 是304 Not Modified,这很好。但是,所有 javascript 文件都加载了from memory cache,状态码为 200。没有重新验证!
然后我尝试修改其中一个 javascript 文件。软重装了吗。你猜怎么着?该文件仍然是从内存缓存中加载的!
为什么 Chrome 会这样做?这不是破坏刷新按钮的目的吗?
Here 是关于 Chrome 内存缓存的更多信息。
【问题讨论】:
-
您如何提供文件?如果您的服务器正在添加可能是原因的缓存控制标头。我会检查缓存资产的网络选项卡并查看它们的标题。
-
Doesn't that defeat the purpose of the refresh button?不是这样,否则会破坏硬刷新的目的。 -
@Rob 我一开始链接的资源说,即使缓存没有过期,软重载也会“重新验证”缓存。如果你通过地址栏打开页面,那么如果缓存没有过期,它就不会重新验证缓存。见here。所以缓存控制不应该是原因,对吧?
-
我个人从不让浏览器控制我的网站缓存需求。对于 javascript 文件,很容易对它们进行版本控制,以最简单的形式,您可以在它们上放置一个查询参数,例如..
<script src="/js/boot.js?ver=1"/>但比这更好的是从您的构建工具中自动生成,我使用 webpack 和我的 url 来做到这一点webpack 对它们进行哈希处理。 -
如果 html 没有被重新加载/更新,那么用户仍然会得到旧的 javascript 文件,不是吗?
标签: javascript html google-chrome caching