Workbox предоставляет гибкий механизм обработки сетевых запросов через сервис-воркеры. Одним из ключевых инструментов является возможность сопоставления запросов с использованием регулярных выражений, что позволяет создавать точные и динамичные стратегии кэширования для различных типов ресурсов.
В Workbox для сопоставления URL запросов чаще всего применяется метод
registerRoute(). Аргументом маршрута может быть
регулярное выражение, которое будет проверять URL
запроса. Это позволяет обрабатывать группы ресурсов, соответствующие
определенному паттерну.
Пример базового использования:
import { registerRoute } from 'workbox-routing';
import { StaleWhileRevalidate } from 'workbox-strategies';
registerRoute(
/.*\.png/,
new StaleWhileRevalidate({
cacheName: 'images-cache',
})
);
В этом примере все запросы к ресурсам с расширением .png
будут обрабатываться стратегией StaleWhileRevalidate, где
сначала возвращается кэшированный ресурс, а затем выполняется обновление
в фоне.
Регулярные выражения могут быть использованы для более сложных сценариев:
registerRoute(
/\/api\/v1\/users\/.*/,
new NetworkFirst({
cacheName: 'users-api-cache',
})
);
Здесь все запросы к API, начинающиеся с /api/v1/users/,
будут использовать стратегию NetworkFirst, что обеспечивает
актуальные данные с сервера, сохраняя резервную копию в кэше.
registerRoute(
/\.(?:js|css|json)$/,
new CacheFirst({
cacheName: 'static-resources-cache',
})
);
Использование группы (?:js|css|json) позволяет
обрабатывать сразу несколько типов файлов одной стратегией.
Workbox поддерживает стандартные флаги JavaScript для регулярных выражений:
Пример с нечувствительностью к регистру:
registerRoute(
/\.jpg$/i,
new CacheFirst({
cacheName: 'jpg-images-cache',
})
);
В этом случае будут совпадать как .jpg, так и
.JPG.
Для динамических или условных сценариев можно комбинировать регулярные выражения с функцией-предикатом, возвращающей булево значение:
registerRoute(
({ url }) => /\/blog\/\d+/.test(url.pathname) && url.searchParams.has('preview'),
new NetworkFirst({
cacheName: 'blog-preview-cache',
})
);
Такой подход позволяет сопоставлять URL на основе комплексных условий, включая параметры запроса.
Регулярные выражения можно использовать вместе с различными стратегиями кэширования Workbox:
Регулярные выражения позволяют применять эти стратегии не к отдельным ресурсам, а ко всей группе, что удобно для масштабных проектов с большим количеством однотипных файлов.
Для проверки работы регулярных выражений полезно использовать консольное логирование:
registerRoute(
/\/assets\/.*\.svg/,
({ url, event, params }) => {
console.log('Обрабатывается SVG:', url.href);
return new CacheFirst({
cacheName: 'svg-cache',
}).handle({ url, event, params });
}
);
Такой подход помогает убедиться, что регулярное выражение совпадает именно с теми URL, которые необходимо кэшировать.
.*) для улучшения производительности.Регулярные выражения в Workbox являются мощным инструментом для гибкой маршрутизации запросов. Они позволяют группировать ресурсы по типам, папкам или условиям запроса, обеспечивая эффективное управление кэшем и улучшение производительности приложений.