我想在我的网站上使用两个服务 worker :一个为我的 PWA 提供经典的离线缓存 (/sw.js
),另一个为本地数据库“服务器”之类的东西提供服务它使用后台同步和推送 (/sw-db.js
)。由于后者往往会做繁重的工作(阻塞事件循环几毫秒),所以最好将其分开。
由于数据库 sw 不用于获取请求,我会给它一个虚拟范围,而 sw.js
的范围是整个域。
第一个响应“获取”事件,是否也为 /sw-db.js
提供代码/URL(使其有点与站点更新)或者服务人员总是通过网络更新。
最佳答案
您传递给 navigatior.serviceWorker.register('/path/to/sw.js')
的 sw.js
脚本 URL 将始终被绕过需要检查更新时的任何其他服务人员。因此,为了回答您的问题,不会触发其他服务人员的 fetch
处理程序。
HTTP cache does come into play每当有服务 worker 脚本的更新检查时。因此,您应该确保为您的用例设置正确的 HTTP 缓存控制 header 。
通常,服务 worker 更新检查是由于导航到由服务 worker 控制的页面而触发的,但如果您有一个具有“虚拟”范围的服务 worker ,它最终不会控制任何页面。也就是说,当服务 worker 处理 sync
或 push
事件时,您最终也会触发更新检查。我不确定是否每个 sync
或 push
都会触发检查,或者只是其中的一个子集,例如导致新服务 worker 产生的那些。但它至少在某些时候会发生。
关于javascript - 同时有两个 service worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41758968/