Service Worker 应该预缓存哪些文件(一般来说)?
What files should be Precached by a Service Worker (in general)?
我很欣赏这个问题可能有点小 'opinion based',但是,我认为一个概括性的答案可能会对将来有兴趣了解更多有关 PWA 和 Service Workers 的其他人有很大帮助。
背景
我在网上搜索过,很惊讶地发现没有关于选择由 Service Worker 为 PWA 预缓存的文件的最佳实践的明确描述。
有各种 articles/documentation 概述了预缓存的作用及其工作原理(有关详细信息,请参阅 here),但其中 none 给出了 'common practices' 的示例.
问题
在标准的渐进式 Web 应用程序中,通常会预缓存哪些文件?
我现在在做什么...
为了确保我的应用程序尽可能离线运行,我预先缓存了以下所有文件:
index.html
模板(我的应用是 Vue SPA)
- 所有JS文件(包括动态导入的JS)
- 全部CSS个文件(只有一个)
- 网络清单
- 应用程序使用的任何自定义字体
- 任何所需的语言文件(这是动态的,即只会预缓存当前访问者的语言)
- 所有应用程序图标(见下面的列表)
- 所有启动画面(见下面的列表)
就我而言,这大约是 2MB(申请完成后可能会增加)
应用图标分解
- android-chrome-192x192.png
- android-chrome-512x512.png
- apple-touch-icon-120x120-precomposed.png
- 苹果触摸图标-120x120.png
- apple-touch-icon-180x180-precomposed.png
- 苹果触摸图标-180x180.png
- apple-touch-icon-72x72-precomposed.png
- 苹果触摸图标-72x72.png
- 苹果触摸图标-precomposed.png
- 苹果触摸-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
- 图标-16x16.png
- 图标-194x194.png
- 图标-32x32.png
- favicon.ico
- mstile-144x144.png
- safari-固定-tab.svg
启动画面的细分
- 飞溅-1125x2436.png
- 飞溅-1242x2148.png
- 飞溅-1536x2048.png
- 飞溅-1668x2224.png
- 飞溅-2048x2732.png
- 飞溅-640x1136.png
- 飞溅-750x1294.png
作为一般规则,您应该在您的 PWA 中预取所有组成应用程序核心的静态资产 shell。
因此,即使没有互联网连接,您也可以立即为您的用户提供最少的资产集。如果这些资源的预取失败,则不会安装 service worker,因为它们对 PWA 本身至关重要。
场景可能因情况而异。
例如,在简单的情况下,您可以只缓存一个离线页面、一些公司徽标图像和相关的 javascript 文件。在其他情况下(例如 https://www.trivago.ch/),您可以提供完整的离线游戏以在离线时与您的用户互动。
我写了一篇关于 Progressive Web Apps 的 series of articles,如果有人想进一步研究这个话题。
我很欣赏这个问题可能有点小 'opinion based',但是,我认为一个概括性的答案可能会对将来有兴趣了解更多有关 PWA 和 Service Workers 的其他人有很大帮助。
背景
我在网上搜索过,很惊讶地发现没有关于选择由 Service Worker 为 PWA 预缓存的文件的最佳实践的明确描述。
有各种 articles/documentation 概述了预缓存的作用及其工作原理(有关详细信息,请参阅 here),但其中 none 给出了 'common practices' 的示例.
问题
在标准的渐进式 Web 应用程序中,通常会预缓存哪些文件?
我现在在做什么...
为了确保我的应用程序尽可能离线运行,我预先缓存了以下所有文件:
index.html
模板(我的应用是 Vue SPA)- 所有JS文件(包括动态导入的JS)
- 全部CSS个文件(只有一个)
- 网络清单
- 应用程序使用的任何自定义字体
- 任何所需的语言文件(这是动态的,即只会预缓存当前访问者的语言)
- 所有应用程序图标(见下面的列表)
- 所有启动画面(见下面的列表)
就我而言,这大约是 2MB(申请完成后可能会增加)
应用图标分解
- android-chrome-192x192.png
- android-chrome-512x512.png
- apple-touch-icon-120x120-precomposed.png
- 苹果触摸图标-120x120.png
- apple-touch-icon-180x180-precomposed.png
- 苹果触摸图标-180x180.png
- apple-touch-icon-72x72-precomposed.png
- 苹果触摸图标-72x72.png
- 苹果触摸图标-precomposed.png
- 苹果触摸-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
- 图标-16x16.png
- 图标-194x194.png
- 图标-32x32.png
- favicon.ico
- mstile-144x144.png
- safari-固定-tab.svg
启动画面的细分
- 飞溅-1125x2436.png
- 飞溅-1242x2148.png
- 飞溅-1536x2048.png
- 飞溅-1668x2224.png
- 飞溅-2048x2732.png
- 飞溅-640x1136.png
- 飞溅-750x1294.png
作为一般规则,您应该在您的 PWA 中预取所有组成应用程序核心的静态资产 shell。
因此,即使没有互联网连接,您也可以立即为您的用户提供最少的资产集。如果这些资源的预取失败,则不会安装 service worker,因为它们对 PWA 本身至关重要。
场景可能因情况而异。
例如,在简单的情况下,您可以只缓存一个离线页面、一些公司徽标图像和相关的 javascript 文件。在其他情况下(例如 https://www.trivago.ch/),您可以提供完整的离线游戏以在离线时与您的用户互动。
我写了一篇关于 Progressive Web Apps 的 series of articles,如果有人想进一步研究这个话题。