Google chrome 镀铬工具“;禁用缓存";:它除了什么都不做之外实际上做了什么(对于服务工作者脚本)?

Google chrome 镀铬工具“;禁用缓存";:它除了什么都不做之外实际上做了什么(对于服务工作者脚本)?,google-chrome,google-chrome-devtools,service-worker,progressive-web-apps,Google Chrome,Google Chrome Devtools,Service Worker,Progressive Web Apps,我试图在假设本地磁盘缓存为空的情况下测试我的站点的行为。我知道每次都有清除缓存和执行Ctrl-F5等操作的方法,但在网络选项卡中还有一个“禁用缓存”复选框,它似乎应该执行我所要执行的操作。。。i、 e.禁用缓存 但是,当我清除缓存、启用该选项并F5重新加载我的站点几次时,我看到的是: 尽管启用了“禁用缓存”,但资源已被缓存,并且正在从缓存提供服务!那么这个选项实际上做了什么呢 编辑 也许我看到的这种行为只与服务工作者脚本的缓存有关?如果加载(从链接到服务人员的示例),至少对我来说,即使启用了“

我试图在假设本地磁盘缓存为空的情况下测试我的站点的行为。我知道每次都有清除缓存和执行Ctrl-F5等操作的方法,但在网络选项卡中还有一个“禁用缓存”复选框,它似乎应该执行我所要执行的操作。。。i、 e.禁用缓存

但是,当我清除缓存、启用该选项并F5重新加载我的站点几次时,我看到的是:

尽管启用了“禁用缓存”,但资源已被缓存,并且正在从缓存提供服务!那么这个选项实际上做了什么呢

编辑


也许我看到的这种行为只与服务工作者脚本的缓存有关?如果加载(从链接到服务人员的示例),至少对我来说,即使启用了“禁用缓存”,也会从磁盘缓存中获取
sw.js
文件。

除了禁用缓存选项之外,在开发人员工具的网络窗格上,现在可以右键单击并从弹出菜单中选择“清除缓存”

此外,如果需要经常清除缓存,可以使用此插件: 有趣的问题

在您提供的屏幕截图中,Name列被切断,因此我无法判断磁盘缓存仍在提供哪些资源。根据“编辑”中的描述,我将假设它是一个服务工作者脚本

那么,我要回答的问题是“浏览器缓存服务工作者(SW)脚本是如何工作的?”

  • 注册软件后,浏览器会将软件脚本存储在磁盘缓存中的单独数据库中。我将其称为SW数据库,但请注意,这不是一个官方术语。请注意,如果服务人员调用importScripts(),这些脚本也会存储在软件数据库中。还请注意,当服务工作者脚本更新时,浏览器将用新脚本覆盖SW数据库中当前存储的脚本。这就是问题所在,其他浏览器可能会有所不同。一,
  • 每次加载页面时,浏览器都会发出一个不可见的请求(即,在DevTools中看不到该请求),以查看是否对service worker脚本进行了任何更新。在我看来,DevTools应该公开这个请求,以便开发人员更好地了解软件生命周期。
    • 如果脚本的一个字节不同,则浏览器会更新软件数据库中的软件脚本
    • 如果软件脚本没有更改,浏览器只提供来自软件数据库的脚本。这是您在DevTools中看到的请求。在我看来,DevTools将此请求描述为
      (从磁盘缓存)
      ,这是一种误导。理想情况下,它应该有一些其他名称来指示此缓存不受禁用缓存复选框的影响
  • 因此,在本例中,您是对的:禁用缓存复选框不起任何作用。如果要确保缓存已完全清除(包括服务人员内容):

  • 转到,确保所有复选框均已启用,然后单击清除站点数据
  • 当DevTools仍然打开时,长按Chrome的重新加载按钮,然后选择空缓存和硬重新加载。有关这些不同选项的说明,请参见


  • 1我从Chrome工程师、《服务人员规范》的合著者Alex Russell那里得到了这个信息。

    为什么不尝试以匿名模式打开网页?@mrid是的,我可以,但我只想知道这个选项的目的是什么。。。以防我错过了一些非常重要的东西exciting@wOxxOm我在我编辑的帖子中提供了一个例子。。。我开始怀疑是否有一些特殊的(可能是错误的?)处理服务工作者脚本特别。。。即使启用了该选项,也会从磁盘缓存中提取。在启用了“禁用缓存”选项的情况下,您是否也看到了从缓存中获取的
    sw.js
    ?回答得很好,而且提到了通过
    importScripts()导入的脚本,这让您倍感荣幸。
    。。。我在我的服务人员中使用。不过你说得对,在服务工作者生命周期中对所有请求都有完整的可见性会更好,这样我们就可以更好地了解发生了什么。第二个建议(按重新加载按钮)没有帮助,但使用“清除存储”清除缓存确实有帮助。随后的重新加载工作正常,所以看起来像个bug。