在同一个服务工作者中处理service-worker.js会有什么影响吗?

时间:2016-05-17 19:18:33

标签: javascript service-worker

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

例如,使用sw-toolbox

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

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

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

2 个答案:

答案 0 :(得分:1)

来自https://www.w3.org/TR/service-workers/#service-worker-registration-update

  

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

另外,从https://www.w3.org/TR/service-workers/#update-algorithm开始,步骤4.8:

  

让响应成为使用r运行fetch的结果,如果缓存条目大于1天,则强制进行网络提取。

答案 1 :(得分:0)

更新请求 NOT 完全通过服务工作者。

根据ServiceWorker规范 -

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

  

将请求skip service worker flag和请求redirect mode设置为"错误"。

fetch有一个https://fetch.spec.whatwg.org/#skip-service-worker-flag

    仅为WebSocket connection (Point 2)
  1. 设置 对于从文档发出的所有请求,
  2. 未设置取消设置 - HTTP Fetch (Point 3)
  3. 此标记 NOT 已公开,并且您无法在请求中使用该标记。
  4. 对于服务工作者更新,此标志为设置,并且它不会通过服务工作者生命周期事件 - 获取。交叉检查,

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

    使用此SW代码并尝试刷新页面,您永远不会使用此功能来更新服务工作者。只有在您

    时才会调用此函数
    fetch('/sw.js')
    

    来自文件。