首页 > 解决方案 > 如果 Service Worker 没有立即激活,PWA 对用户不是不友好吗?

问题描述

我发布了另一个问题作为对此问题的强力解决方案(Angular:在其他任何事情之前完全安装服务工作者),但我想我会制作一个单独的问题来讨论当服务工作者按预期使用时的用例。

根据服务工作者生命周期(https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle),软件已安装,但只有在您重新加载页面后它才处于活动状态(您可以claim()在页面但这仅适用于安装服务工作者后发生的调用)。原因是如果现有版本更新,旧版本和新版本不会混合状态和缓存。我可以同意这个决定。

我难以理解的是为什么它在最初安装后不会立即激活。相反,它需要重新加载页面,除非您在 SW 中明确定义预缓存规则。如果您使用通配符定义缓存规则,则无法预缓存这些规则,因此您需要重新加载。

给定一个单页 PWA(如 Angular),用户将在其上发现站点和浏览器,但在该会话期间永远不会重新加载该页面。如果他们以后想离线使用该站点,则需要至少再刷新一次或重新打开该选项卡。这对我来说似乎是一个很大的陷阱。

我在这里错过了什么吗?

标签: service-workerprogressive-web-apps

解决方案


您对 Service Worker 生命周期的理解是正确的,但我认为您提到的陷阱没有您想象的那么严重。

如果我对您的理解正确,那么只有当用户在页面的初始浏览期间(在服务人员处于活动状态之前)失去连接并且缺少离线资产时,用户体验才会受到负面影响。如果这确实是您要考虑的场景,则可以将该离线资产预缓存在浏览器端的 javascript 中。或者,正如您所提到的,您可以在不刷新页面的情况skipWaiting()claim()使服务工作人员处于活动状态。


推荐阅读