一个Service Worker(通常情况下)应该预缓存哪些文件?

9

我知道这个问题可能有点“基于观点”,但是我认为一个概括性的答案可以帮助那些未来对PWA和服务工作者感兴趣的人。

背景

我在网上搜索了一下,惊讶地发现没有明确说明在选择要由服务工作者预缓存的文件时最佳实践是什么。

有各种文章/文档概述了预缓存的作用和工作原理(请参见此处获取更多信息),但它们中没有一个给出“常规实践”的示例。

问题

在标准渐进式Web应用程序中,人们通常会预缓存哪些文件?

我目前正在做的事情...

为了确保我的应用程序在离线时尽可能地正常工作,我正在预缓存所有以下文件:

  • index.html 模板(我的应用程序是Vue SPA)
  • 所有JS文件(包括动态导入的JS)
  • 所有CSS文件(只有一个)
  • Web清单
  • 应用程序使用的任何自定义字体
  • 任何所需的语言文件(这是动态的,即只会预缓存当前访问者的语言)
  • 所有应用程序图标(请参见下面的列表)
  • 所有启动画面(请参见下面的列表)

在我的情况下,这大约是2MB(一旦应用程序完成可能会增加)

应用程序图标的详细信息

  • android-chrome-192x192.png
  • android-chrome-512x512.png
  • apple-touch-icon-120x120-precomposed.png
  • apple-touch-icon-120x120.png
  • apple-touch-icon-180x180-precomposed.png
  • apple-touch-icon-180x180.png
  • apple-touch-icon-72x72-precomposed.png
  • apple-touch-icon-72x72.png
  • apple-touch-icon-precomposed.png
  • apple-touch-icon.png
  • icon_128x128.png
  • icon_144x144.png
  • icon_152x152.png
  • icon_192x192.png
  • icon_384x384.png
  • icon_512x512.png
  • icon_72x72.png
  • icon_96x96.png
  • favicon-16x16.png
  • favicon-194x194.png
  • favicon-32x32.png
  • favicon.ico
  • mstile-144x144.png
  • safari-pinned-tab.svg

启动画面的详细信息

  • splash-1125x2436.png
  • splash-1242x2148.png
  • splash-1536x2048.png
  • splash-1668x2224.png
  • splash-2048x2732.png
  • splash-640x1136.png
  • splash-750x1294.png
1个回答

2
通常情况下,您应该在PWA中预取组成应用程序核心外壳的所有静态资源。
因此,这是您希望立即为用户提供的最小资源集,即使没有互联网连接也可以使用。如果这些资源的预取失败,则服务工作者将不会安装,因为它们对于PWA本身至关重要。

具体情况可能因案例而异。
例如,在简单情况下,您可以仅缓存离线页面、一些公司标志图像和相关的JavaScript文件。在其他情况下(例如https://www.trivago.ch/),您可以提供完整的离线游戏以与用户进行交互。

我写了一系列关于渐进式Web应用程序的文章,如果有人想进一步研究这个主题,请查看series of articles


非常感谢您!这基本上是我已经想到的,但我只是想确认一下,因为我不想通过我的不良实践来过度使用缓存。如果您在构建本地化PWA方面有任何经验,请查看此问题,因为这个问题让我困惑... https://dev59.com/BLbna4cB1Zd3GeqPVBXL - Ben Carey
我从未遇到过这种要求,因此我暂时无法回答您。我会进行一些研究,并希望能尽快给您答复。 - Francesco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接