service-worker - 服务 worker : pitfalls of self. skipWaiting() 和 self.clients.claim()

标签 service-worker progressive-web-apps

要在安装后立即激活 service worker,我使用 self.skipWaiting()在安装监听器中。要立即控制页面(无需页面导航,例如页面加载),我使用 self.clients.claim() .我明白做这样的事情意味着:

  • 页面可以在不受 Service Worker 控制的情况下首先加载,然后在其生命周期内由 Service Worker 接管。
  • 一个页面可以在 Service Worker 版本 1 的控制下启动,但在其生命周期内被版本 2 接管。

  • 网上有各种各样的警告关于做这样的事情,但我没有看到陷阱。也许一个潜在的问题是受控页面在首次加载时是否与 Service Worker 进行了一些初始握手或设置。当新的 Service Worker 在后台激活时,这显然会被忽略,但即便如此,Service Worker 也可以向其控制页面发送消息以通知它们更改。

    在我看来,对于大多数情况下的大多数应用程序,同时使用 self.skipWaiting() 会显着受益。和 self.clients.claim()没有任何缺点。我错过了什么?

    最佳答案

    self.skipWaiting()的陷阱在这里描述得非常好(感谢@RobertRowntree 提供链接):

    https://redfin.engineering/how-to-fix-the-refresh-button-when-using-service-workers-a8e27af6df68

    至于self.clients.claim() ,我仍然没有看到反对它的令人信服的论据,但是当我看到时,我会更新我的答案。

    关于service-worker - 服务 worker : pitfalls of self. skipWaiting() 和 self.clients.claim(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49482577/

    相关文章:

    javascript - 服务 worker : how to do a synchronous queue?

    angular5 - Angular 5 Service Worker 不工作

    ios - 在桌面谷歌浏览器上模拟 "IOS add to home screen"进行调试

    progressive-web-apps - Ionic 4 PWA 启动画面更改位置路径

    javascript - Chrome 在离线时禁用按钮和输入元素

    javascript - 使用工作箱运行时缓存,请求不会显示在 chrome 的缓存存储中

    javascript - Js错误: Uncaught (in promise) TypeError: Request failed in first line

    javascript - Service Worker 不允许 PWA 显示离线

    service-worker - serviceWorker.getRegistration 和 serviceWorker.ready.then 的区别

    progressive-web-apps - target=_blank 的链接在浏览器中打开