在同一个服务工作者中处理service-worker.js有任何影响吗

Is there any effect of handling service-worker.js in the same service worker?

本文关键字:js 任何 影响 service-worker 处理 服务 同一个 服务工作 工作者      更新时间:2023-09-26

假设我的服务人员是sw.js。如果我使用相同的服务工作者(sw.js)预缓存或缓存此文件,会有任何影响吗?

例如,使用软件工具箱,

toolbox.precache(['sw.js']);
toolbox.router.get('/sw.js', toolbox.cacheOnly);

和,

navigator.serviceWorker.register('sw.js');

现在,这个服务工作者是否应该更新,或者浏览器是否会允许一个特殊的获取,检查URL是否与活动的ServiceWorkerURL完全匹配,并尊重服务工作者的24小时强制更新并接入网络?

来源https://www.w3.org/TR/service-workers/#service-工人注册更新:

update()在不咨询缓存的情况下ping服务器以获取此脚本的更新版本。这在概念上与UA每24小时最多进行一次的操作相同。

此外,来自https://www.w3.org/TR/service-workers/#update-算法,步骤4.8:

让response是使用r运行fetch的结果,如果缓存的条目超过1天,则强制执行网络fetch。

NO

更新请求根本不会通过服务工作者。

根据ServiceWorker规范-

更新算法中的点5.2-https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#update-算法

将请求的跳过服务工作者标志和请求的重定向模式设置为"error"。

fetch有一个https://fetch.spec.whatwg.org/#skip-服务工作者标志

  1. 仅为WebSocket连接设置(点2)
  2. 未为从文档发出的所有请求设置取消设置
  3. 此标志是NOT公开的,您不能在请求中使用它

对于服务工作者更新,此标志是set,并且它不经过服务工作者生命周期事件-获取。与交叉检查

toolbox.router.get('/sw.js', function(...args) {
  // never called
  console.log(...args);
  return toolbox.cacheOnly(...args);
});

使用此软件代码并尝试刷新页面,您永远无法使用此功能更新服务人员。只有当

fetch('/sw.js')

来自文档。