Web Workers 中的 Service Worker

Service worker inside Web Workers

实现可以使用 service worker 处理网络调用的 webworker 的正确方法是什么。例如

网络工作者和服务工作者实际上是独立的。

如果您有一个 service worker 控制特定页面,那么任何源自该页面或该页面上使用的网络 worker 的 HTTP 请求都会触发该 service worker 上的 fetch 事件。这适用于由网络工作者 fetch()XMLHttpRequest 触发的 HTTP 请求。 Web Worker 不需要 "know" 提前了解 Service Worker 或任何事情。

请注意,service worker 可以像 web worker 一样发送和响应 message 事件,因此您可以完全消除 web worker 并将所有逻辑转移到服务中工人。但这取决于您的 Web Worker 究竟在做什么,以及您希望对支持 Web Worker 但(目前)不支持 Service Worker 的浏览器提供何种级别的支持。

Service Worker 的生命周期有限。浏览器主动卸载 Service Workers,这就是为什么 event.waitUntil(promise) 存在于处理程序中(尽管这只是一个请求,浏览器仍然可以杀死它)

对于规范的 service worker 使用这没问题,但是如果你想要一个很长的 运行 并行进程,你需要一个 (Web) Worker。