【问题标题】:Two service workers at the same time两名服务人员同时
【发布时间】:2017-01-20 08:17:24
【问题描述】:
我想在我的网站上使用两个服务工作人员:一个为我的 PWA 提供经典的离线缓存 (/sw.js),另一个为使用后台同步和推送的本地数据库“服务器”(@ 987654322@)。由于后者往往会做繁重的工作(阻塞事件循环几毫秒),因此最好将其分开。
由于数据库 sw 不用于获取请求,我会给它一个虚拟范围,而 sw.js 的范围是整个域。
第一个响应“获取”事件是否也为/sw-db.js 提供代码/URL(使其在某种程度上与站点更新同步)或者是服务工作者总是通过网络更新。
【问题讨论】:
标签:
javascript
service-worker
progressive-web-apps
【解决方案1】:
当需要检查更新时,您传递给 navigatior.serviceWorker.register('/path/to/sw.js') 的 sw.js 脚本 URL 将始终绕过任何其他服务工作者进行获取。因此,为了回答您的问题,不会触发其他服务人员的 fetch 处理程序。
HTTP cache does come into play 每当有服务工作者脚本的更新检查时。因此,您应该确保为您的用例设置了正确的 HTTP 缓存控制标头。
通常,由于导航到由 Service Worker 控制的页面,会触发 Service Worker 更新检查,但如果您有一个具有“虚拟”范围的 Service Worker,它最终不会控制任何页面。话虽如此,当服务工作者处理 sync 或 push 事件时,您最终也会触发更新检查。我不确定是否每个sync 或push 都会触发检查,或者只是其中的一部分,例如导致新服务工作者产生的那些。但它至少会在某些时候发生。