Рабочий блок: Нет способа повторно проверить предварительно кэшированные элементы? - PullRequest
0 голосов
/ 21 февраля 2020

Я использую Workbox, чтобы сделать сайт CMS автономным. У меня есть сервисный работник, вызывающий и предварительно кэширующий страницы сайта, ресурсы и автономную страницу. Проблема заключается в том, что с предварительным кэшированием, по-видимому, невозможно обновить кэш без изменения работника службы. В моем случае это CMS, поэтому авторы не будут перестраивать этот сервисный работник при обновлении контента сайта. Я предполагал, что смогу просто использовать стратегию StaleWhileRevalidate, но, к моему ужасу, нет способа предоставить стратегию кэширования для «precacheAndRoute ()» или «precache ()» и «addRoute ()». Кажется, это упущение со стороны команды Workbox, но, чтобы быть уверенным, я хотел бы получить какие-либо отзывы о том, как можно реализовать это решение, не меняя работника службы каждый раз, когда обновляется страница сайта.

Спасибо !

1 Ответ

0 голосов
/ 21 февраля 2020

ответил на мой вопрос. Публикуем здесь, если кто-то окажется в подобном случае.

Согласно https://developers.google.com/web/tools/workbox/modules/workbox-precaching#serving_precached_responses, следующая информация подсказывает мне решение:

Порядок, в котором вы вызываете precacheAndRoute () или addRoute (), важен. Обычно вы хотите вызвать его на ранних этапах в файле рабочего сервиса, прежде чем регистрировать любые дополнительные маршруты с помощью registerRoute (). Если вы сначала вызвали registerRoute (), и этот маршрут соответствовал входящему запросу, то любая стратегия, определенная вами в этом дополнительном маршруте, будет использоваться для ответа вместо стратегии сначала кэширования, используемой в workbox-precaching.

Так что я сбросил «precacheAndRoute ()» в пользу просто «precache ()». Затем я сделал registerRoute () со стратегией StaleWhileRevalidate, соответствующей этим ресурсам. Важной частью было указание cacheName в качестве предварительного кэша:

new workbox.strategies.StaleWhileRevalidate({
    cacheName: workbox.core.cacheNames.precache
})

Оглядываясь назад довольно просто, но сначала документация не была ясна в отношении того, что выглядело как нечто, что должно быть встроено прямо в preCacheAndRoute.

...