В библиотеке Workbox для управления кэшированием и стратегиями обработки сетевых запросов одним из ключевых инструментов является сопоставление запросов. Сопоставление с помощью строк предоставляет гибкий способ указания, какие запросы должны обрабатываться конкретными стратегиями кэширования.
Сопоставление строк в Workbox работает через передачу строки или
массива строк в методах registerRoute и
Routing.registerRoute. Строка интерпретируется как
точное совпадение пути запроса, начиная с корня сайта,
если не указан специальный шаблон.
Пример использования базового сопоставления:
import { registerRoute } from 'workbox-routing';
import { StaleWhileRevalidate } from 'workbox-strategies';
registerRoute(
'/styles/main.css',
new StaleWhileRevalidate()
);
В этом примере только запросы к
/styles/main.css будут обрабатываться стратегией
StaleWhileRevalidate. Все остальные запросы будут
проигнорированы.
Workbox позволяет использовать маски с подстрокой,
используя синтаксис с символом *. Такой подход полезен для
обработки запросов к набору ресурсов, расположенных в одном каталоге или
имеющих общий префикс.
Пример:
registerRoute(
'/images/*',
new StaleWhileRevalidate()
);
Здесь будут сопоставляться все запросы, начинающиеся с
/images/, включая /images/logo.png и
/images/icons/icon1.svg.
Строки обеспечивают простое сопоставление и меньше загружают процесс регистрации маршрутов, чем регулярные выражения. Однако следует учитывать, что:
|).Пример ограничения:
// Нельзя так:
registerRoute(
'/images/*.png|.jpg', // это не сработает
new StaleWhileRevalidate()
);
Для обработки таких случаев нужно использовать RegExp:
registerRoute(
/\.(?:png|jpg)$/,
new StaleWhileRevalidate()
);
Workbox позволяет передавать массив строк в
registerRoute, что упрощает регистрацию нескольких
маршрутов, которые должны обрабатываться одной стратегией:
registerRoute(
[
'/styles/main.css',
'/scripts/app.js',
'/offline.html'
],
new NetworkFirst()
);
Все перечисленные ресурсы будут кэшироваться согласно стратегии
NetworkFirst. Такой подход снижает количество повторяющихся
вызовов registerRoute.
Сопоставление строк учитывает путь запроса без query-параметров, если не использовать дополнительную обработку. Например:
registerRoute(
'/api/data',
new NetworkFirst()
);
Запрос к /api/data?user=123 не будет
совпадать с маршрутом. Чтобы обрабатывать такие варианты, нужно
либо использовать регулярные выражения, либо создать
функцию-предикат:
registerRoute(
({ url }) => url.pathname.startsWith('/api/data'),
new NetworkFirst()
);
При передаче строки Workbox проверяет только путь
URL. Протокол (http/https) и домен
учитываются, только если указать их явно:
registerRoute(
'https://example.com/styles/main.css',
new CacheFirst()
);
Если домен не указан, Workbox предполагает текущий origin. Это особенно важно для проектов, использующих несколько поддоменов или CDN.
Сопоставление строк идеально подходит для:
/offline.html.Стратегии кэширования могут быть любыми, но чаще всего используются
CacheFirst для ресурсов, которые редко изменяются, и
StaleWhileRevalidate для часто обновляемых статических
ресурсов.
* позволяют обрабатывать группы ресурсов.registerRoute.Строковое сопоставление является фундаментальным инструментом Workbox для статического контента, обеспечивая лёгкость и читаемость конфигурации кэширования.