gpt4 book ai didi

service-worker - 在单页应用中检查 Service Worker 更新

转载 作者:行者123 更新时间:2023-12-04 04:29:42 29 4
gpt4 key购买 nike

我们有一个安装了 Service Worker 并处于事件状态的信号页面应用程序。

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

我们的客户不知道这个新的 Service Worker 文件,它仍在使用旧的 Service Worker 文件。

什么时候工作?
如果我刷新/重新加载应用程序,则会安装新的 Service Worker。

如果服务 worker 文件正在服务器上更新并且没有重新加载客户端,我们如何刷新客户端?

可能的解决方案 :
我想,我需要在 1 小时后进行投票。

最佳答案

隐式更新

The Service Worker Lifecycle ”是此类问题的重要资源。

特别是,有一个 section dealing with updates :

An update is triggered:

  • On navigation to an in-scope page.
  • On functional events such as push and sync, unless there's been an update check within the previous 24 hours.
  • On calling .register() only if the service worker URL has changed.


显式更新

因为您的 SPA 不使用真正的导航,所以您不会获得第一个要点中提到的自动更新检查。

您可以做的是按照 later on in that section 中的示例进行操作:

As I mentioned earlier, the browser checks for updates automatically after navigations and functional events, but you can also trigger them manually:

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


我可能会做的是修改您的 SPA 的路由器,并在您的路由器即将切换到新 View 时自动调用 reg.update()。这将模拟您在非 SPA 中获得的相同导航更新行为。

register() 是如何适应的?

在至少对 navigator.serviceWorker.register() 进行了一次调用后,Service Worker 就有机会安装和激活。此时,无论是否再次调用 navigator.serviceWorker.register(),都会检查 Service Worker 更新。

此答案的前面部分描述了何时进行这些更新检查,无论是隐式还是显式。

您可以通过比较 service worker 规范中 RegisterUpdate 作业之间的差异来深入了解这一点。

关于service-worker - 在单页应用中检查 Service Worker 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51748241/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com