Модуль workbox-core является фундаментальной частью
библиотеки Workbox и обеспечивает базовый функционал для создания
сервис-воркеров и управления кэшированием ресурсов в Progressive Web
Applications (PWA). Основная цель этого модуля — предоставление
универсальных инструментов для настройки стратегий кэширования,
управления версиями кэша и безопасной работы с сервис-воркерами.
workbox-core не содержит готовых стратегий кэширования
ресурсов, таких как CacheFirst или
NetworkFirst — эти стратегии реализованы в других модулях
Workbox. Основная задача workbox-core — предоставление
базовых утилит и API для работы с сервис-воркерами и кэшами, на которых
строятся более сложные механизмы.
Модуль предоставляет функцию setCacheNameDetails(),
которая позволяет настроить шаблоны имен кэшей. Это критически важно для
организации структуры кэша и управления версиями, чтобы при обновлениях
не возникали конфликты между старыми и новыми данными:
import { setCacheNameDetails } from 'workbox-core';
setCacheNameDetails({
prefix: 'my-app',
suffix: 'v1',
precache: 'precache',
runtime: 'runtime-cache'
});
В результате создаются кэши с именами вида
my-app-precache-v1 и my-app-runtime-cache-v1.
Такой подход упрощает очистку устаревших кэшей при деплое новых версий
приложения.
workbox-core предоставляет функции
skipWaiting() и clientsClaim(), которые
помогают управлять жизненным циклом сервис-воркера:
Применение этих функций выглядит следующим образом:
import { skipWaiting, clientsClaim } from 'workbox-core';
skipWaiting();
clientsClaim();
Такое управление жизненным циклом критически важно для обеспечения актуальности ресурсов и предотвращения конфликта версий кэша.
Для управления кэшами используется утилита
CacheableResponse и вспомогательные методы работы с
ограничением объема и времени хранения данных.
import { CacheableResponse } from 'workbox-core';
const cacheableResponse = new CacheableResponse({
statuses: [0, 200] // кэшируем только успешные ответы
});
Такой подход гарантирует, что в кэш не попадут ошибки или редиректы.
Для ограничения размера кэша и удаления устаревших данных обычно
используют интеграцию с workbox-expiration, однако
workbox-core предоставляет базовые функции для проверки и
удаления кэшей вручную через стандартный Cache API.
workbox-core включает встроенные инструменты для
логирования и отладки работы сервис-воркеров. Функция
setLogLevel() позволяет настраивать уровень логов:
import { setLogLevel } from 'workbox-core';
setLogLevel('debug'); // вывод подробной информации о действиях сервис-воркера
Уровни логирования включают debug, warn,
error, что позволяет гибко управлять информативностью
сообщений во время разработки и деплоя.
workbox-core упрощает работу с сообщениями между
сервис-воркером и клиентом через стандартный API
MessageChannel. С помощью функции
clients.matchAll() можно получать все контролируемые
страницы и отправлять им сообщения о событиях кэширования, обновления
ресурсов или ошибках:
self.addEventListener('message', async (event) => {
if (event.data && event.data.type === 'SKIP_WAITING') {
skipWaiting();
}
});
Это особенно полезно для реализации интерактивных уведомлений о доступности новых версий приложения.
workbox-coreworkbox-core выступает как фундаментальный слой для
построения надежных, управляемых и масштабируемых PWA. Он обеспечивает
базовые инструменты для версионирования кэшей, управления жизненным
циклом сервис-воркера, контроля асинхронной коммуникации и фильтрации
кэшируемых ресурсов, что делает его незаменимым элементом любой
архитектуры на базе Workbox.