【问题标题】:Does a service worker cache work site-wide, even without loading an HTML with sw.js?即使不使用 sw.js 加载 HTML,Service Worker 缓存是否可以在整个站点范围内工作?
【发布时间】:2017-12-20 05:10:43
【问题描述】:

无论用户是否实际在加载了 sw.js 的 HTML 页面上,Service Worker 缓存是否在站点范围内工作?

例如: 假设...

  • 用户浏览器上的注册服务人员
  • 具有由 sw 控制的本地缓存
  • 本地缓存缓存了一些文件,包括html、js、css和一些jpg的

如果用户在浏览器中直接访问这些 JPG 或 CSS 文件中的任何一个,浏览器是否会通过 service worker 运行请求和/或自行识别这些本地文件,从而呈现本地缓存的文件?

【问题讨论】:

    标签: javascript service-worker


    【解决方案1】:

    一个服务工作者被激活,它的fetch处理程序将在任何时候被触发:

    • 导航到服务工作者范围内的 URL。
    • 服务工作者范围内的客户端页面对 URL 的请求。 (例如请求图片或样式表等)

    如果您要直接导航到存在于服务工作者范围内的 URL,即使该 URL 不对应于 HTML 文档,服务工作者的 fetch 处理程序也将有机会响应。

    如果您的 service worker 有一个 fetch 处理程序,该处理程序始终以给定 URL 的缓存版本进行响应,那么是的,该响应将用于完成导航,即使资产是图像或样式表或其他东西.

    您可以自己测试一下:

    1. 访问像 https://images.guide/ 这样的站点,该站点安装了一个 Service Worker,缓存了许多资源,并使用了一个 fetch 处理程序,该处理程序通过缓存响应对预缓存资源的请求。
    2. 下线。
    3. 导航到预缓存的 URL,例如 https://images.guide/images/hamburger.svg

    您会看到预缓存的资源用于响应导航请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 2017-12-26
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多