Как кешировать подписанные файлы (Сервисный работник)

Несколько интерфейсных приложений реализуют шаблон подписи в файлах для управления кешем, и каждое изменение в файле изменяет подпись. Как мне заставить Service Worker обрабатывать эти подписи и кеш?

Примеры подписи:

  • SW-d58e3582afa99040e27b92b13c8f2280.js
  • sw.js? _gc = 20180101

Я работаю над приложением, которое уже готово, и пытаюсь внедрить работника сервиса, чтобы некоторые функции стали доступны в автономном режиме.

Например, в этом разделе мне нужно сказать, что я буду кешировать, однако приложение изменяет подписи файла для управления кешем. (сегодня это так)

caches.open('my-cache').then(function(cache) {
return cache.addAll([
    '/index.html',
    '/styles.css',
    '/main.js'
]);})

Приложение всегда меняет "styles.css" на "styles.css? V = 1527624807103_1" (отметка времени). Насколько я понимаю, "styles.css" - это не то же самое, что "styles.css? V = 1527624807103_1".

1 ответ

Решение

Вам не следует указывать версию или добавлять параметр signture к URL-адресу, используемому для вашего фактического рабочего файла службы верхнего уровня. Как объяснено в " Жизненном цикле сервисного работника ":

Это может привести к такой проблеме:

  1. index.html регистрирует sw-v1.js в качестве сервисного работника.
  2. sw-v1.js кэширует и обслуживает index.html, поэтому он работает в автономном режиме.
  3. Вы обновляете index.html, чтобы он регистрировал ваш новый блестящий файл sw-v2.js.

Если вы делаете выше, пользователь никогда не получает sw-v2.js, так как sw-v1.js обслуживает старую версию index.html из своего кэша. Вы поставили себя в положение, когда вам необходимо обновить своего сервисного работника, чтобы обновить своего сервисного работника.

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

Workbox является одним из таких инструментов, и есть другие, как sw-precache (предшественник Workbox) и offline-plugin,

Другие вопросы по тегам