Service Worker:self.skipWaiting() 和 self.clients.claim() 的陷阱

Joh*_*ika 5 service-worker progressive-web-apps

为了在安装后立即激活服务工作人员,我self.skipWaiting()在安装侦听器中使用。为了立即控制页面(不需要页面导航,例如页面加载),我使用self.clients.claim(). 我明白做这样的事情意味着:

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

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

在我看来,对于大多数场景下的大多数应用程序来说,使用两者都会显着受益self.skipWaiting(),并且self.clients.claim()没有任何缺点。我错过了什么?

Joh*_*ika 2

这里很好地描述了其中的陷阱self.skipWaiting()(感谢@RobertRowntree 提供的链接):

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

至于self.clients.claim(),我还没有看到令人信服的反对意见,但当我看到时,我会更新我的答案。