Sw-precache является мощным инструментом для генерации сервис-воркеров в приложениях на JavaScript, позволяя автоматически кэшировать статические ресурсы. Эффективное управление списком кэшируемых файлов напрямую влияет на производительность приложения, скорость загрузки и стабильность офлайн-режима.
Sw-precache использует параметр staticFileGlobs для
указания файлов и шаблонов, которые должны быть закэшированы. Для
оптимизации следует:
staticFileGlobs: [
'dist/css/main.css',
'dist/js/app.js',
'dist/js/vendor.js'
]
лучше применять шаблоны:
staticFileGlobs: [
'dist/**/*.js',
'dist/**/*.css'
]
Это снижает вероятность пропуска новых файлов при сборке и облегчает поддержку.
Исключать динамические файлы. Файлы, генерируемые на сервере или с уникальными хешами, не должны попадать в кэш без дополнительной логики, иначе сервис-воркер будет загружать устаревшие версии.
Разделять критические и второстепенные ресурсы. Критические файлы (HTML, основные CSS и JS) следует кэшировать сразу, второстепенные (шрифты, изображения) — по мере необходимости или с отложенной загрузкой через runtime caching.
stripPrefix и stripPrefixMultiЭти параметры помогают очистить путь к файлам, чтобы адреса в кэше были компактными и удобными для обновления.
stripPrefix: 'dist/',
Преобразует 'dist/js/app.js' в 'js/app.js'
в кэше. Для проектов с несколькими корнями можно использовать
stripPrefixMulti:
stripPrefixMulti: {
'dist/': '',
'vendor/': 'lib/'
}
Это позволяет унифицировать структуру кэша и облегчает последующую работу с версиями файлов.
Для предотвращения конфликтов и устаревших версий важно применять хеширование файлов. Пример:
app.1a2b3c.js.staticFileGlobs указывать все версии через шаблон
app.*.js.Sw-precache корректно обновит кэш при изменении хеша, исключая необходимость ручного удаления старых ресурсов.
Параметр dontCacheBustUrlsMatching позволяет избежать
излишней перезаписи кэша для ресурсов, чьи URL содержат хеш. Пример:
dontCacheBustUrlsMatching: /\.\w{8}\./
Это предотвращает ненужное обновление кэша при каждом деплое, если файл не изменился.
Sw-precache поддерживает ignoreUrlParametersMatching,
который позволяет игнорировать query-параметры при кэшировании. Полезно
для:
Пример:
ignoreUrlParametersMatching: [/^utm_/]
Все параметры, начинающиеся с utm_, не будут создавать
новые кэш-записи, что уменьшает размер кэша и повышает
эффективность.
Для динамических ресурсов стоит использовать runtime caching,
оставляя staticFileGlobs только для неизменяемых файлов.
Пример конфигурации:
runtimeCaching: [{
urlPattern: /\/api\/.*\/*.json/,
handler: 'networkFirst'
}]
Такое разделение позволяет минимизировать кэш и одновременно обеспечить актуальность данных, получаемых из сети.
staticFileGlobs, объединяя и минифицируя CSS и
JS.staticFileGlobs через скрипты или
плагины сборщика.Эти подходы обеспечивают баланс между скоростью загрузки, стабильностью офлайн-режима и актуальностью ресурсов, минимизируя вероятность ошибок и устаревшего контента в кэше.