Как Workbox решает, соответствует ли маршрут запросу?

Распространенным шаблоном в Workbox является кэширование ресурсов Google со стратегией StaleWhileRevalidate:

workbox.routing.registerRoute(
        /.*(?:googleapis)\.com/,
        new workbox.strategies.StaleWhileRevalidate({
            cacheName: 'googleapis',
        })
);

Мне нравится понимать, почему регулярное выражение, используемое в приведенном выше примере, соответствует запросам для любых подресурсов на googleapis.com, хотя само регулярное выражение соответствует только части домена, субдомена и домена верхнего уровня URI. Таким образом, Workbox, кажется, запускает обработчик как для полных совпадений, так и для частичных совпадений. Это правильно?


person Mathias S    schedule 10.06.2020    source источник


Ответы (1)


Используемый базовый класс: RegExpRoute , а также есть расширенная документация. объясняя некоторые действия.

Вы правы, что при использовании RegExpRoute маршрут сработает, если RegExp соответствует рассматриваемому URL-адресу. Если RegExp не включает ^ и $ или что-то еще, что могло бы привязать его к началу или концу строки, то частичное совпадение также вызовет его.

Честно говоря, это немного сбивает с толку, и недавно просмотрел документацию и изменил почти все примеры маршрутизации используют matchCallback с проверками параметров url или request.

Грубый эквивалент в (возможно) более четком синтаксисе того, что вы поделились выше, будет

workbox.routing.registerRoute(
  ({url}) => url.origin.endsWith('googleapis.com'),
  new workbox.strategies.StaleWhileRevalidate({
    cacheName: 'googleapis',
  })
);
person Jeff Posnick    schedule 10.06.2020