Sw-precache — это инструмент для генерации сервис-воркеров, которые автоматически кэшируют ресурсы веб-приложения, обеспечивая его работу в офлайн-режиме и улучшая показатели производительности при повторных посещениях. Он тесно интегрируется с концепцией Progressive Web App (PWA) и позволяет управлять стратегиями кэширования, минимизируя ручное вмешательство.
Ключевые функции:
service-worker.js с заранее определёнными
правилами кэширования.Настройка Sw-precache осуществляется через объект конфигурации,
передаваемый в функцию swPrecache.write. Основные
параметры:
staticFileGlobs — массив путей к
файлам, которые необходимо закэшировать. Можно использовать шаблоны,
например:
['./index.html', './css/**/*.css', './js/**/*.js'].
stripPrefix — удаляет указанную
часть пути при сохранении файлов в кэше, полезно при деплое в
подпапки.
runtimeCaching — массив объектов,
определяющих стратегии кэширования для запросов, которые не входят в
staticFileGlobs.
urlPattern — регулярное выражение для сопоставления
URL.handler — стратегия обработки запроса:
cacheFirst, networkFirst,
fastest.navigateFallback — URL, который
будет возвращён при навигации к несуществующему маршруту, поддерживая
SPA.
stripPrefixMulti — позволяет
задавать несколько префиксов для очистки путей.
verbose — логирование процесса
генерации сервис-воркера.
Пример конфигурации:
const swPrecache = require('sw-precache');
swPrecache.write('service-worker.js', {
staticFileGlobs: [
'dist/**/*.html',
'dist/css/**/*.css',
'dist/js/**/*.js',
'dist/images/**/*.{png,jpg,gif,svg}'
],
stripPrefix: 'dist/',
runtimeCaching: [
{
urlPattern: /\/api\/.*$/,
handler: 'networkFirst'
}
],
navigateFallback: '/index.html',
verbose: true
});
Выбор стратегии кэширования зависит от типа ресурса и требований к обновлению данных:
Lighthouse оценивает PWA по нескольким критериям, включая наличие сервис-воркера и правильность кэширования:
staticFileGlobs доступны в офлайн-режиме.Для максимальной эффективности и соответствия рекомендациям Lighthouse необходимо:
staticFileGlobs: кэшировать только необходимые
ресурсы.runtimeCaching для API и
динамических ресурсов: применять networkFirst с
разумными таймаутами.Пример динамического кэширования:
runtimeCaching: [
{
urlPattern: /\/api\/users\/.*/,
handler: 'networkFirst',
options: {
cache: {
name: 'api-cache',
maxEntries: 50,
maxAgeSeconds: 300
}
}
}
]
logger для детального анализа процесса генерации кэша.Sw-precache обеспечивает прозрачное и автоматизированное кэширование для PWA, повышая показатели Lighthouse, снижая время загрузки и обеспечивая работу приложения в офлайне. Использование правильных стратегий кэширования и конфигураций позволяет добиться стабильной и предсказуемой работы сервиса при любых условиях сети.