Одной из наиболее частых проблем при работе с
sw-precache является некорректная настройка путей к
ресурсам. Связано это с тем, что библиотека использует абсолютные и
относительные пути для генерации кэша. Например, если в параметре
staticFileGlobs указать неправильный путь:
staticFileGlobs: [
'dist/*.js',
'dist/css/*'
]
а на самом деле файлы находятся в поддиректории
dist/scripts/ и dist/styles/, то сервис-воркер
не сможет их закешировать. В результате браузер будет загружать
устаревшие версии файлов или вовсе не найдет их в кэше.
Также частая ошибка — использование
ignoreUrlParametersMatching без учета параметров, которые
реально приходят в URL. Неправильная регулярка может привести к тому,
что динамический контент не будет обслуживаться из кэша, или наоборот,
закэшируются URL с параметрами, которые не должны кэшироваться.
navigateFallbacknavigateFallback используется для указания страницы,
которая будет возвращаться при навигации на неизвестные URL (например,
при SPA). Распространенные ошибки:
navigateFallback: 'index.html' // ❌
Правильный вариант:
navigateFallback: '/index.html' // ✅
navigateFallback без
navigateFallbackWhitelist, сервис-воркер может
перехватывать API-запросы, что приведет к ошибкам при работе
приложения.sw-precache по умолчанию кэширует статические файлы с
использованием хеша имени файла. Проблемы возникают, когда:
cacheId. Это приводит к конфликтам
кэша, когда старые файлы остаются в браузере и мешают корректной
загрузке новых ресурсов.Для предотвращения подобных ошибок рекомендуется:
cacheId уникально для каждой версии
приложения.При указании больших директорий в staticFileGlobs без
фильтров можно случайно закэшировать слишком много данных.
Последствия:
QuotaExceededError.Решение — использовать шаблоны, которые явно ограничивают типы и размеры файлов, например:
staticFileGlobs: [
'dist/**/*.js',
'dist/**/*.css',
'!dist/**/*.map'
]
sw-precache предназначен для статических ресурсов.
Попытка кэшировать динамические ответы API через
runtimeCaching без учета стратегии кэширования часто
приводит к некорректным данным. Типичные ошибки:
GET-запросов без проверки заголовков
Cache-Control.cacheTimeout для ресурсов, которые
обновляются часто.Правильная конфигурация требует настройки:
runtimeCaching: [
{
urlPattern: /\/api\/.*$/,
handler: 'networkFirst',
options: {
cache: {
maxEntries: 50,
maxAgeSeconds: 300
}
}
}
]
Часто sw-precache используется вместе с
Webpack, Gulp или другими сборщиками.
Наиболее частые проблемы:
staticFileGlobs.Рекомендуется:
cacheId.Даже идеально сгенерированный SW не будет работать без корректной регистрации. Распространенные ошибки:
navigator.serviceWorker.register('sw.js') // ❌ если файл находится в /dist/
sw-precache поддерживает verbose режим для
отладки. Игнорирование логов приводит к тому, что ошибки кэширования
остаются незамеченными. Включение логирования позволяет:
staticFileGlobs.navigateFallback с учетом исключений для
API.cacheId и версионирование
файлов.runtimeCaching для динамических
ресурсов.