我们有一个信号页应用程序,该应用程序已安装并处于活动状态。
现在我们的服务器重建了应用程序,服务端文件正在服务器端更新。
我们的客户对这个新的Service worker文件一无所知,并且仍在使用旧的Service worker文件。
何时有效? 如果我刷新/重新加载该应用程序,则表示正在安装新的Service Worker。
如果正在服务器上更新服务工作者文件并且未重新加载客户端,我们如何刷新客户端?
可能的解决方案: 我认为,我需要在1小时左右后进行轮询。
答案 0 :(得分:5)
“ The Service Worker Lifecycle”是解决这类问题的好资源。
特别是有一个section dealing with updates:
触发更新:
- 导航至范围内页面。
- 在诸如推送和同步之类的功能性事件上,除非在过去的24小时内进行了更新检查。
- 仅在服务工作者URL发生更改时才调用.register()。
由于您的SPA不使用真实的导航,因此您不会得到第一个要点中提到的自动更新检查。
相反,您可以按照later on in that section中的示例进行操作:
正如我之前提到的,浏览器会自动检查更新 在导航和功能事件之后,但是您也可以触发它们 手动:
navigator.serviceWorker.register('/sw.js').then(reg => { // sometime later… reg.update(); });
我可能要做的就是修改SPA的路由器,并在每次路由器要切换到新视图时自动呼叫reg.update()
。这样可以模拟出与非SPA相同的导航更新行为。