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

标签 caching service-worker workbox

在阅读了很多教程后,我发现 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 的使用情况继续如此)。

此外,由于您的代码仅调用 installactivate 监听器内的这些方法,因此相关代码在大多数情况下甚至不会执行仅当有更新的服务工作线程时,服务工作线程才会启动。

关于caching - 在 Service Worker 中使用 self.clients.claim() 和 self.skipWaiting() 可能会增加加载时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46911701/

相关文章:

c++ - 缓存未命中是否与我们是否使用堆内存相关?

wcf - 在 SQL CE 数据库中缓存数据

node.js - Workbox Service Worker 在更改时不更新

html - 清除缓存,Chrome 不会停止使用旧的 CSS

php - 取消设置 php 中的变量会影响缓存吗?

html - 在没有完全 https 站点的情况下,是否可以在 html5 中推送通知?

html - Application Cache 或 Service Worker——在 2016/Q2 中使用哪个?

javascript - 如果设置 onSync 回调,则工作箱后台同步不会运行

service-worker - 使用 Workbox 的动态缓存

ios - Cordova PWA 应用程序离线模式