在阅读了很多教程后,我发现 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()
和 self.clients.claim()
通过采取一些操作,同时立即使用 未定义
值进行解析。
就 self.skipWaiting()
而言,所采取的操作实际上只是翻转内部标志并导致 Service Worker 尝试激活。对于 self.clients.claim()
,操作是遍历所有客户端并尝试让当前正在执行的 Service Worker 取得控制权。
这两个方法返回的实际 promise 是无关紧要的,您不必将它们包装在 event.waitUntil()
中(尽管这并没有什么坏处,并且许多示例Service Worker 的使用情况继续如此)。
此外,由于您的代码仅调用 install
和 activate
监听器内的这些方法,因此相关代码在大多数情况下甚至不会执行仅当有更新的服务工作线程时,服务工作线程才会启动。
关于caching - 在 Service Worker 中使用 self.clients.claim() 和 self.skipWaiting() 可能会增加加载时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46911701/