Workbox предоставляет мощный механизм управления кэшированием с использованием ревизий файлов и хэширования, что позволяет эффективно обновлять ресурсы и обеспечивать корректное кеширование статических файлов. Основная идея заключается в том, что каждый файл получает уникальный идентификатор (ревизию), основанный на содержимом файла. Если содержимое файла изменяется, хэш также изменяется, что позволяет сервис-воркеру правильно обновлять кэшированные ресурсы.
При использовании Workbox для предкэширования ресурсов каждый файл передается в массив ресурсов с указанием его URL и опционально ревизии:
import {precacheAndRoute} from 'workbox-precaching';
precacheAndRoute([
{url: '/index.html', revision: '123456'},
{url: '/styles/main.css', revision: 'abcdef'},
{url: '/scripts/app.js', revision: '7890ab'}
]);
url — путь к ресурсу.revision — уникальный идентификатор,
чаще всего генерируемый автоматически на основе хэша содержимого
файла.Если ревизия не указана, Workbox будет использовать URL как идентификатор. Это может быть полезно для динамически изменяемых ресурсов, однако для статических файлов рекомендуется всегда использовать хэш, чтобы гарантировать точное обновление.
Хэширование файлов позволяет сервис-воркеру точно определять, какие файлы изменились. Workbox CLI и плагины для сборщиков, таких как Webpack, могут автоматически генерировать хэши на основе содержимого файлов:
const {GenerateSW} = require('workbox-webpack-plugin');
module.exports = {
plugins: [
new GenerateSW({
clientsClaim: true,
skipWaiting: true,
include: [/\.html$/, /\.js$/, /\.css$/],
}),
],
};
Плагин автоматически добавляет ревизии к каждому файлу, основываясь на его хэше. Это исключает необходимость ручного управления идентификаторами и снижает риск ошибок при обновлении кэша.
При изменении содержимого файла хэш также меняется. При следующей активации сервис-воркера Workbox:
Это гарантирует, что пользователи всегда получают актуальные версии ресурсов, а устаревшие файлы не остаются в кэше.
Workbox использует стратегию precache-first, при которой сначала проверяется наличие файла в кэше, и только при необходимости загружается новый. Для обновления кэша можно настроить следующие параметры:
skipWaiting — сервис-воркер сразу
активируется после установки.clientsClaim — позволяет
контролировать страницы без перезагрузки.revision — изменение хэша запускает
обновление кэша.Пример:
import {precacheAndRoute} from 'workbox-precaching';
precacheAndRoute(self.__WB_MANIFEST, {
ignoreURLParametersMatching: [/^utm_/, /^fbclid$/]
});
self.__WB_MANIFEST генерируется автоматически при сборке
и содержит список всех файлов с их хэшами.
Стабильность URL URL ресурса должен оставаться неизменным, чтобы хэш служил единственным источником идентификации.
Малые изменения, новые хэши Любое изменение содержимого файла приведет к изменению хэша, что гарантирует корректное обновление кэша.
Оптимизация объема кэша Удаление устаревших ресурсов предотвращает переполнение кэша и снижает нагрузку на устройство пользователя.
Игнорирование параметров URL Workbox позволяет игнорировать параметры, которые не влияют на содержимое, предотвращая лишние перезаписи кэша.
Использование ревизий и хэширования в Workbox обеспечивает точное управление версионностью ресурсов, автоматическое обновление кэша и надежное хранение статических файлов, что критично для стабильной работы прогрессивных веб-приложений.