假设我的服务人员是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>
答案 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
对于服务工作者更新,此标志为设置,并且它不会通过服务工作者生命周期事件 - 获取。交叉检查,
toolbox.router.get('/sw.js', function(...args) {
// never called
console.log(...args);
return toolbox.cacheOnly(...args);
});
使用此SW代码并尝试刷新页面,您永远不会使用此功能来更新服务工作者。只有在您
时才会调用此函数fetch('/sw.js')
来自文件。