Какие файлы должны быть предварительно кэшированы сервис-воркером (в общем)?

Я понимаю, что этот вопрос может быть в некоторой степени «основанным на мнении», однако я думаю, что обобщенный ответ может очень помочь другим в будущем, которые заинтересованы в получении дополнительных сведений о PWA и Service Workers.

Фон

Я поискал в Интернете и с удивлением не нашел четкого описания того, что лучше всего подходит для выбора файлов, которые должны быть предварительно кэшированы Service Worker для PWA.

Существуют различные статьи / документация, в которых описывается, что делает предварительное кэширование и как оно работает (см. здесь для получения дополнительной информации), но ни в одном из них нет примеров «общепринятой практики».

Вопрос

Какие файлы обычно предварительно кэшируются в стандартном прогрессивном веб-приложении?

Чем я сейчас занимаюсь ...

Чтобы мое приложение работало как можно лучше в автономном режиме, я предварительно кэширую все следующие файлы:

  • Шаблон index.html (мое приложение - Vue SPA)
  • Все файлы JS (включая JS из динамического импорта)
  • Все файлы CSS (есть только один)
  • Веб-манифест
  • Любые пользовательские шрифты, которые использует приложение.
  • Любые требуемые языковые файлы (это динамический, т.е. будет предварительно кэшировать язык только текущего посетителя)
  • Все значки приложений (см. Список ниже)
  • Все заставки (см. Список ниже)

В моем случае это примерно 2 МБ (вероятно, увеличится после завершения приложения).

Разбивка значков приложений

  • 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

person Ben Carey    schedule 01.09.2019    source источник


Ответы (1)


Как правило, вы должны предварительно загрузить в PWA все статические ресурсы, составляющие оболочку ядра приложения.
Таким образом, минимальный набор ресурсов, который вы хотите сделать немедленно доступным для вашего пользователя, даже без подключения к Интернету. Если предварительная выборка этих ресурсов не удалась, сервис-воркер НЕ будет установлен, поскольку они имеют решающее значение для самого PWA.

Сценарии могут меняться от случая к случаю.
Например, в простом случае вы можете кэшировать только автономную страницу, некоторые изображения логотипов компании и соответствующий файл javascript. В другом (например, https://www.trivago.ch/) вы можете предоставить полный автономный игра, чтобы взаимодействовать с вашими пользователями в автономном режиме.

Я написал серию статей о прогрессивных веб-приложениях, если кто-то хочет продолжить изучение этой темы.

person Francesco    schedule 03.09.2019
comment
Большое вам спасибо за это! По сути, это то, о чем я уже думал, но просто хотел подтверждения, поскольку я не хочу перегружать кеш своей плохой практикой. Если у вас есть опыт создания локализованных PWA, ответьте на этот вопрос, так как он меня озадачил ... stackoverflow.com/questions/57763393/ - person Ben Carey; 03.09.2019
comment
У меня никогда не было такого доброго требования, поэтому я пока не могу вам ответить. Я проведу несколько исследований и, надеюсь, вернусь к вам с ответом. - person Francesco; 03.09.2019