Precache-манифест в Workbox представляет собой массив объектов, описывающих ресурсы, которые необходимо кэшировать при установке сервис-воркера. Размер этого манифеста напрямую влияет на производительность загрузки приложения: чем больше манифест, тем дольше проходит этап установки сервис-воркера и тем выше вероятность перегрузки кэш-памяти. Оптимизация манифеста становится критически важной задачей при работе с крупными SPA и PWA.
1. Исключение ненужных ресурсов Не все статические ресурсы требуют предварительного кэширования. Чаще всего к precache включают:
Файлы, которые изменяются динамически или редко используются, лучше кэшировать через runtime caching, а не через precache.
2. Группировка ресурсов Если есть несколько мелких файлов, которые часто обновляются вместе, их можно объединить в один бандл. Это снижает количество записей в манифесте и уменьшает overhead на установку сервис-воркера.
3. Использование
.ignoreURLParametersMatching Workbox позволяет
игнорировать параметры URL, которые не влияют на содержимое ресурса.
Например, URL с UTM-метками:
workbox.precaching.precacheAndRoute(self.__WB_MANIFEST, {
ignoreURLParametersMatching: [/^utm_/]
});
Это позволяет избежать дублирования одной и той же сущности с разными параметрами, уменьшая размер манифеста.
1. Минификация и сжатие файлов Все JS, CSS и HTML-файлы должны проходить процесс минификации. Это уменьшает их размер на диске и снижает нагрузку на кэш. Дополнительно можно использовать gzip или Brotli на сервере.
2. Динамическая генерация манифеста При использовании Webpack и Workbox Plugin рекомендуется настроить генерацию манифеста так, чтобы в него попадали только последние версии файлов с хешами в имени. Пример конфигурации:
new WorkboxWebpackPlugin.GenerateSW({
clientsClaim: true,
skipWaiting: true,
exclude: [/\.map$/, /asset-manifest\.json$/]
});
Параметр exclude позволяет исключать большие карты
исходников и вспомогательные файлы, не требующие кэширования.
Разделение ресурсов на precache и runtime caching уменьшает общий размер манифеста:
Использование стратегий StaleWhileRevalidate или
CacheFirst для runtime caching позволяет эффективно
управлять кэшем без перегрузки precache-манифеста.
Для больших приложений стоит внедрять ленивую загрузку модулей и ресурсов. Workbox поддерживает условное кэширование отдельных частей приложения. Пример для подгрузки страниц:
workbox.routing.registerRoute(
({url}) => url.pathname.startsWith('/pages/'),
new workbox.strategies.NetworkFirst({
cacheName: 'pages-cache',
plugins: [
new workbox.expiration.ExpirationPlugin({
maxEntries: 50,
maxAgeSeconds: 7 * 24 * 60 * 60
})
]
})
);
Это уменьшает количество файлов в precache и гарантирует, что кэшируется только востребованный контент.
precacheAndRoute с кастомными опциямиWorkbox позволяет задавать дополнительные опции при вызове
precacheAndRoute, которые помогают оптимизировать
манифест:
directoryIndex: исключает индексные файлы из манифеста,
если они доступны по другим URL.revision: использование хешей для версий файлов
позволяет избежать дублирования одного и того же ресурса при каждой
сборке.Пример:
workbox.precaching.precacheAndRoute(self.__WB_MANIFEST, {
directoryIndex: '/',
cleanURLs: true
});
Регулярная проверка размера precache-манифеста позволяет выявлять проблемы на ранней стадии. Для анализа можно использовать:
self.__WB_MANIFEST.length для проверки количества
записей;chrome://serviceworker-internals/).Оптимизация манифеста — это непрерывный процесс, включающий фильтрацию ресурсов, управление версиями и анализ runtime caching, что позволяет минимизировать нагрузку на сеть и кэш, обеспечивая быстрый старт приложения.