При работе с Workbox в JavaScript именование кэшей играет критически важную роль для управления версионированием, структурой хранения и очисткой устаревших данных. Workbox предоставляет гибкий и детализированный подход к организации кэшей, позволяя создавать предсказуемую структуру и избегать конфликтов между различными ресурсами.
1. Уникальность имени кэша
Каждый кэш должен иметь уникальное имя, которое однозначно идентифицирует его содержимое. Обычно имя кэша формируется по следующей схеме:
<имя-приложения>-<тип-ресурсов>-v<версия>
Примеры:
myapp-images-v1myapp-scripts-v2myapp-styles-v3Использование версии (v1, v2 и т.д.)
обеспечивает контроль над обновлениями ресурсов и позволяет безопасно
удалять устаревшие кэши.
2. Разделение по типам ресурсов
Для оптимальной работы рекомендуется создавать отдельные кэши для разных типов ресурсов:
scripts)styles)images, media)api-data)Разделение позволяет применять различные стратегии кэширования (например, CacheFirst для изображений и NetworkFirst для данных API) без риска переполнения одного кэша.
Версионирование кэшей является ключевым инструментом для контроля их обновления. Существует несколько стратегий:
scripts-abcdef1234), что гарантирует уникальность кэша при
любом изменении ресурса.Хэширование особенно полезно для динамических сборок с инструментами типа Webpack или Vite, где каждая сборка автоматически получает уникальные имена файлов.
Workbox предоставляет несколько способов задавать имена кэшей:
workbox.routing.registerRoute:workbox.routing.registerRoute(
({request}) => request.destination === 'image',
new workbox.strategies.CacheFirst({
cacheName: 'myapp-images-v1',
plugins: [
new workbox.expiration.ExpirationPlugin({
maxEntries: 50,
maxAgeSeconds: 30 * 24 * 60 * 60, // 30 дней
}),
],
})
);
workbox.precaching.precacheAndRoute для
статических ресурсов:workbox.precaching.precacheAndRoute([
{url: '/index.html', revision: '123456'},
{url: '/styles/main.css', revision: 'abcdef'}
], {
cacheName: 'myapp-static-v1'
});
В этом случае cacheName определяет общий кэш для всех
предзагруженных ресурсов. Обновление версии кэша приводит к
автоматической очистке старого кэша.
При изменении версии кэша старые версии должны удаляться. Workbox
автоматически удаляет устаревшие кэши при использовании
precacheAndRoute, однако для кастомных кэшей необходимо
вручную управлять очисткой:
workbox.core.cleanupOutdatedCaches();
Эта функция удаляет все кэши, имена которых не совпадают с текущими определенными в приложении. Использование понятной схемы именования с версией обеспечивает предсказуемое удаление устаревших данных.
Эффективное именование кэшей обеспечивает устойчивость работы сервис-воркера, упрощает сопровождение приложения и минимизирует вероятность ошибок при обновлении ресурсов.