如何使用 Service Worker 识别服务器上的更新?

Luc*_*uer 3 javascript web service-worker progressive-web-apps

是否可以识别服务器上的更新,即页面(HTML)或样式(CSS)上的更新,并向服务器发出请求以获取更新的数据?如果是这样,怎么办?

Umu*_*göz 5

不久;

  1. 当您的 Service Worker 脚本发生更改时,一旦用户使用您的 PWA 上线,它就会设置为替换旧用户的脚本。
  2. 您应该将更改反映到您的软件中的项目数组中。
  3. 您应该更改缓存的名称,并删除旧的缓存。
  4. 因此,您的用户将始终拥有最新版本的应用程序。

有细节;

1) 更改您的软件以替换当前的一个用户。

即使您的软件发生了最轻微的变化,也足以将其视为新版本,因此它将接管旧版本。谷歌网络开发者的这句话解释了这一点;

更新您的 Service Worker JavaScript 文件。当用户导航到您的站点时,浏览器会尝试重新下载在后台定义 Service Worker 的脚本文件。如果 Service Worker 文件与当前文件相比甚至有一个字节的差异,它就会认为它是新的。

最佳实践是在软件中的任何位置保留版本号,并在内容更改时以编程方式更新它。甚至可以引用,没关系,它仍然有效。请记住:即使是一个字节的差异也足够了。

2) 将您的更改反映到要缓存的项目列表中。

您保留要缓存在软件中的资产列表。因此,请将添加/更新/删除的资产反映到您的列表中。最佳实践是为您的资产设置缓存破坏程序。可以这么说,这是因为 SW 位于浏览器缓存后面的一层。

换句话说:来自软件的获取请求会经过浏览器缓存。因此,SW 将从浏览器缓存而不是服务器中选择新资源,并缓存这些资源,直到 SW 再次更改。

在这种情况下,您最终将有一半的用户将 PWA 与新资产一起使用,而另一半则遭受令人难以置信的错误。你会度过一段美好的时光,因为你会过度地抱怨和沮丧,因为无法找到原因或重现这些问题的方法。

3)替换旧的缓存,不要合并它。

如果您不更改更新后的资源列表的缓存名称,这些资源将与旧资源合并。

合并将以保留旧资产和删除资产的方式进行,同时添加新资产和更改资产将被替换。虽然这种方式看起来一切正常,但您将在用户设备上积累旧资产。而且你存储的空间并不是无限的。

4)大家都很开心

实施和跟踪所有提到的事情可能看起来很乏味,但我向您保证,否则您将开始处理更大、更不愉快的事情。不满意的用户将是一个很好的加分。

因此,我鼓励您一次性设计您的软件。