Service Workers: Прозрачное Обновление Кэша

Service Works как технология создания автономных приложений очень хорошо подходит для кэширования различных ресурсов.

В Интернете подробно описаны различные тактики работы в сервис-воркере с локальным кэшем.

Единственное, что не описано, это как обновлять файлы в кеше.

Единственное, что предлагают Google и MDN — это сделать несколько кешей для разных типов ресурсов, и при необходимости изменить версию этого кеша в скрипте ворк-сервиса sw.js, после чего он весь будет удален.

Удаление кешей

  
   

var CURRENT_CACHES = { font: 'font-cache-v1', css:'css-cache-v1', js:'js-cache-v1' }; self.addEventListener('activate', function(event) { var expectedCacheNames = Object.keys(CURRENT_CACHES).

map(function(key) { return CURRENT_CACHES[key]; }); // Delete out of date cahes event.waitUntil( caches.keys().

then(function(cacheNames) { return Promise.all( cacheNames.map(function(cacheName) { if (expectedCacheNames.indexOf(cacheName) == -1) { console.log('Deleting out of date cache:', cacheName); return caches.delete(cacheName); } }) ); }) ); });

Другими словами, если у вас есть, например, десять js-файлов, и вы измените один из них, всем пользователям придется перезагрузить все js-файлы.

Довольно неуклюжая работа.

Из сторонних продуктов (пусть и от разработчиков Google) рабочий сервис наиболее близок к решению проблемы обновления файлов кэша.

библиотека sw-precache .

Он добавляет в sw.js хеши всех файлов, для которых разработчиком настроено отслеживание изменений.

Если на сервере будет изменен хотя бы один из них, то при следующей активации службы-воркера весь кеш клиента снова обновится — но теперь уже без каких-либо особых действий со стороны программиста.

Топор заменили колуном.



Постановка задачи

Нам нужно прозрачное и надежное обновление файлов кэша сервис-воркера.

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

Попробуем решить эту проблему.

Давайте возьмем общее пример гугла рабочий сервис, работающий по принципу: «сначала из кэша, если нет там, то из сети».

Для начала понятно, что вам необходимо иметь список отслеживаемых файлов.

Также нужно как-то сравнить их с версиями файлов в кеше.

Это можно сделать как на сервере, так и на клиенте.



Опция 1

Мы используем файлы cookie. Мы зафиксируем время его последнего посещения в файлах cookie пользователя.

При следующем входе мы сравниваем его на сервере со временем модификации отслеживаемых файлов, и передаем список измененных с этого момента файлов в html-коде страницы, непосредственно перед регистрацией сервис-воркера.

Для этого мы включаем вывод следующего php-файла: обновленные_ресурсы.

php

<Эphp $files = [

Теги: #кэширование #cache #serviceworker #pwa #progressive web apps #html5 #JavaScript #frontend #оптимизация клиента #разработка веб-сайтов #JavaScript #программирование #оптимизация клиента

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.