Service Worker 应该预缓存哪些文件(通常)?

Ben*_*rey 7 service-worker progressive-web-apps sw-precache workbox

我很欣赏这个问题可能有点“基于意见”,但是,我认为一个概括的答案可以非常有助于将来有兴趣了解更多关于 PWA 和 Service Worker 的其他人。

背景

我在网上搜索过,但很惊讶地发现,在选择要由 Service Worker 为 PWA 预缓存的文件时,没有明确说明最佳实践是什么。

有各种文章/文档概述了预缓存的作用及其工作原理(有关更多信息,请参见此处),但没有一篇提供“常见做法”的示例。

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

我目前在做什么...

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

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

就我而言,这大约为 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
  • 苹果触摸图标.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
  • 图标
  • mstile-144x144.png
  • safari-pinned-tab.svg

启动画面的细分

  • 飞溅-1125x2436.png
  • 飞溅-1242x2148.png
  • 飞溅-1536x2048.png
  • 飞溅-1668x2224.png
  • 飞溅-2048x2732.png
  • 飞溅-640x1136.png
  • 飞溅-750x1294.png

Fra*_*sco 2

作为一般规则,您应该在 PWA 中预取构成应用程序核心 shell 的所有静态资产
因此,即使没有互联网连接,您也希望立即为用户提供最少的资产集。如果这些资源的预取失败,则不会安装 Service Worker,因为它们对于 PWA 本身至关重要。

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

如果有人想进一步研究该主题,我写了一系列有关渐进式 Web 应用程序的文章。