Библиотека Sw-precache предназначена для генерации сервис-воркеров, которые автоматически кэшируют ресурсы веб-приложения. Основная идея заключается в том, что при установке сервис-воркера создается предопределённый кэш, включающий указанные статические файлы. Это позволяет обеспечить быстрый доступ к ним даже при отсутствии соединения с сетью.
Ключевые моменты работы с кэшем:
Процесс начинается с конфигурации Sw-precache через
sw-precache или sw-precache-webpack-plugin.
Основные параметры:
staticFileGlobs – массив путей к статическим файлам для
кэширования.stripPrefix – префикс пути, который нужно удалить при
добавлении файлов в кэш.runtimeCaching – объект правил для динамического
кэширования запросов.handleFetch – включает перехват запросов
сервис-воркером.Пример конфигурации:
const swPrecache = require('sw-precache');
swPrecache.write('service-worker.js', {
staticFileGlobs: [
'public/**/*.html',
'public/css/**/*.css',
'public/js/**/*.js',
'public/images/**/*.{png,jpg,gif,svg}'
],
stripPrefix: 'public/',
runtimeCaching: [{
urlPattern: /\/api\/.*$/,
handler: 'networkFirst'
}],
handleFetch: true
});
После генерации файл service-worker.js регистрируется в
основном скрипте приложения:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker.js')
.then(() => console.log('Service Worker зарегистрирован'))
.catch(err => console.error('Ошибка регистрации:', err));
}
Для проверки работы сервис-воркера и кэша существуют встроенные инструменты в браузерах, в первую очередь в Chrome DevTools:
install, activate, fetch).Рекомендуемая последовательность тестирования:
install.runtimeCaching.Обновление ресурсов в приложении требует особого внимания. Sw-precache использует уникальные имена кэшей на основе хэшей файлов, поэтому старый кэш удаляется при активации новой версии.
Методы проверки:
navigator.serviceWorker.ready и проверить, что новый кэш
появился.activate: добавить в
service-worker.js логирование события
activate, чтобы убедиться, что очистка старого кэша
выполнена.Пример логирования активации:
self.addEventListener('activate', event => {
console.log('Service Worker активирован. Очистка старых кэшей...');
event.waitUntil(
caches.keys().then(cacheNames => {
return Promise.all(
cacheNames.map(cacheName => {
if (cacheName !== 'my-app-cache-v2') {
return caches.delete(cacheName);
}
})
);
})
);
});
Частые проблемы и способы их диагностики:
staticFileGlobs и stripPrefix.handleFetch: true и настройки
runtimeCaching.Offline в DevTools и убедиться, что все критические файлы
доступны из кэша.Логирование событий сервис-воркера (install,
activate, fetch) является основным
инструментом для глубокого анализа и тестирования.
Для крупных проектов рекомендуется использовать автоматизированные тесты, которые проверяют:
networkFirst, cacheFirst).Инструменты для автоматизации включают Puppeteer и Jest, которые позволяют программно имитировать регистрацию сервис-воркера, проверку содержимого кэша и работу приложения без сети.
Тестирование кэша в Sw-precache требует системного подхода: проверка статических и динамических ресурсов, версионирование и симуляция оффлайн-режима позволяют обеспечить стабильную работу приложения в любых условиях сети.