在 Service Worker 中使用 self.clients.claim() 和 self.skipWaiting() 可能会增加加载时间?

Use of self.clients.claim() and self.skipWaiting() in service worker may increase the load time?

看了很多教程,我发现 self.skipWaiting() 用于立即将更新应用到现有的 serviceWorker,而 self.clients.claim() 用于在第一次加载时立即获得控制权。

self.addEventListener('install', function(event) {
    event.waitUntil(self.skipWaiting());
});
self.addEventListener('activate', function(event) {
    event.waitUntil(self.clients.claim());
});

它是根据每个请求查找更新还是在内部如何工作? self.clients.claim()self.skipWaiting() 的使用对负载或服务工作者性能有任何影响吗?

从性能角度来看没有影响。

两者 self.skipWaiting() and self.clients.claim() 都通过采取一些行动来工作,同时立即用 undefined 值解决。

self.skipWaiting() 的情况下,正在采取的操作实际上只是翻转一个内部标志并导致 service worker 尝试激活。在 self.clients.claim() 的情况下,操作是遍历所有客户端并尝试让当前正在执行的 service worker 取得控制权。

这两种方法返回的实际 promise 是无关紧要的,您不必将它们包装在 event.waitUntil() 中(尽管它没有坏处,许多 service worker 用法示例继续这样做)。

此外,因为您的代码只调用 installactivate 侦听器内部的那些方法,所以有问题的代码甚至不会在服务工作者线程的大部分时间执行启动——仅当有更新的 service worker 时。