在单页应用程序中检查Service Worker更新

San*_*rma 5 service-worker workbox workbox-webpack-plugin

我们有一个信号页应用程序,它已安装并处于活动状态。

现在我们的服务器重建了应用程序,服务端文件正在服务器端更新。

我们的客户对这个新的Service Worker文件一无所知,并且仍在使用旧的Service Worker文件。

什么时候有效? 如果我刷新/重新加载该应用程序,则正在安装新的Service Worker。

如果正在服务器上更新服务工作者文件并且未重新加载客户端,我们如何刷新客户端?

可能的解决方案:我认为,我需要在1小时左右之后进行轮询。

Jef*_*ick 6

服务工作者生命周期 ”是解决此类问题的重要资源。

特别是,有一节涉及更新

触发更新:

  • 导航至范围内页面。
  • 在诸如推送和同步之类的功能性事件上,除非在过去的24小时内进行了更新检查。
  • 仅在服务工作者URL更改时才调用.register()。

由于您的SPA不使用真实的导航,因此您不会得到第一个项目符号中提到的自动更新检查。

相反,您可以按照该部分后面的示例操作:

如前所述,浏览器会在导航和功能事件后自动检查更新,但您也可以手动触发它们:

navigator.serviceWorker.register('/sw.js').then(reg => {
  // sometime later…
  reg.update();
});
Run Code Online (Sandbox Code Playgroud)

我可能要做的就是修改SPA的路由器,并reg.update()在路由器要切换到新视图时自动打个电话。这将模拟与非SPA中相同的导航更新行为。

  • 感谢您解释这一点。我6个月的奋斗已经得到了这个答复的答案。我添加了一个 History.listener 来检查 Service Worker 更新。我实现了请求用户许可重新加载应用程序以跨多个选项卡获取最新更新的流程。你可以检查我的代码https://github.com/rahuls360/testing-sw (3认同)