3

在阅读了许多教程之后,我发现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()性能有何影响?

4

1 回答 1

4

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

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

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

这两种方法返回的实际承诺是无关紧要的,您不必将它们包装起来event.waitUntil()(尽管它没有坏处,并且许多服务工作者使用示例继续这样做)。

此外,由于您的代码仅调用installactivate侦听器内部的那些方法,因此相关代码甚至在服务工作线程启动的大部分时间都不会执行——只有在有更新的服务工作人员时才会执行。

于 2017-10-26T20:41:02.970 回答