Как кешировать подписанные файлы (Сервисный работник)
Несколько интерфейсных приложений реализуют шаблон подписи в файлах для управления кешем, и каждое изменение в файле изменяет подпись. Как мне заставить 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-адресу, используемому для вашего фактического рабочего файла службы верхнего уровня. Как объяснено в " Жизненном цикле сервисного работника ":
Это может привести к такой проблеме:
- index.html регистрирует sw-v1.js в качестве сервисного работника.
- sw-v1.js кэширует и обслуживает index.html, поэтому он работает в автономном режиме.
- Вы обновляете index.html, чтобы он регистрировал ваш новый блестящий файл sw-v2.js.
Если вы делаете выше, пользователь никогда не получает
sw-v2.js
, так какsw-v1.js
обслуживает старую версию index.html из своего кэша. Вы поставили себя в положение, когда вам необходимо обновить своего сервисного работника, чтобы обновить своего сервисного работника.
Что касается фактических URL-адресов, которые включены в ваш файл рабочего сервиса, который может на законных основаниях содержать управление версиями / хэши / подписи, лучше всего использовать инструмент, который интегрируется с процессом сборки и генерирует список URL-адресов на основе последних версии каждого файла, которые должны быть в кеше.
Workbox является одним из таких инструментов, и есть другие, как sw-precache
(предшественник Workbox) и offline-plugin
,