我有一个Angular PWA应用程序,该应用程序每15秒检查一次Service Worker更新,这意味着该应用程序查看缓存的静态文件是否仍然有效。如果有新的部署,服务人员将以静默方式更新缓存,并让用户知道有可用的更新,以及是否要刷新。
如果用户当前正在使用该应用程序,则此方案还可以。但是,假设用户未使用该应用程序。即使关闭浏览器也可以更新缓存吗?我认为这可能是可行的,因为一旦注册了服务工作者,便可以侦听推送通知,那么是否也可以自动更新应用程序的缓存?
答案 0 :(得分:1)
通常,当浏览器关闭(未运行)时,您的应用无法执行任何操作including get push notifications。我认为Android是一个例外,因为设备会处理推送通知,然后将启动浏览器来处理通知。
当浏览器正在运行但您的站点没有打开任何选项卡/窗口时,服务人员无法触发任何活动。有一些proposals用于API,但是它们都存在很多隐私问题,而且还没有解决。
理论上,您可以发送push notifications to wake up服务工作人员并检查更新,但是有一些配额限制了总推送次数。大多数(如果不是全部)浏览器也会向用户require that web pushes show a notification web sockets阻止静默用户跟踪。
还请注意,每15秒检查一次更新非常激进。您应确保不会浪费设备资源和消耗带宽。您可能需要研究server sent events或{{3}}。这将使您的所有服务器将更新通知给活动的客户端。
关于保持您的内容尽可能最新,我建议尝试为热交换代码设计您的应用程序。因此,您可以加载网站的缓存版本,检查更新并在活动客户端中无缝开始运行更新的代码,而无需重新加载。
答案 1 :(得分:0)
如果要更新服务人员,则应使用其更新功能-来自“ @ angular / service-worker”的SwUpdate。
订阅SwUpdate会在有可用更新时通知您,使您可以决定如何处理。
请找到更多信息here