Ответ 1
Примечание: Начиная с Firefox 57, поведение по умолчанию изменилось на учет для обновленная спецификация рабочего специалиста. В Firefox 57+ директивы кэширования HTTP по умолчанию будут игнорироваться при проверке службы-службы script для обновлений. Описание ниже по-прежнему относится к Chrome с октября 2017 года.
Каждый раз, когда вы переходите на новую страницу под областью рабочего стола, Chrome делает стандартный HTTP-запрос для ресурса JavaScript, который был передан вызову navigator.serviceWorker.register()
. Предположим, что он называется service-worker.js
. Этот запрос создается только в сочетании с навигацией или когда работник службы проснулся через, например, событие push
. Существует не фоновый процесс, который повторяет каждый рабочий-сервис script каждые 24 часа или что-то автоматическое.
Этот HTTP-запрос будет подчиняться стандартным директивам кеша HTTP, за одним исключением (которое рассматривается в следующем абзаце). Например, если ваш сервер установил соответствующие заголовки HTTP-ответа, которые указывали, что кешированный ответ должен использоваться в течение 1 часа, то в течение следующего часа запрос браузера на service-worker.js
будет выполняться кешем браузера. Обратите внимание, что мы не говорим о API кэширования кэша, что не имеет отношения к этой ситуации, а скорее стандартный HTTP-кеширование браузера.
Единственное исключение для стандартных правил кэширования HTTP, и это то, что происходит в течение 24 часов, заключается в том, что браузеры всегда будут подключаться к сети, если возраст элемента service-worker.js
в кеше HTTP превышает 24 часа, Таким образом, функционально, нет никакой разницы в использовании max-age
1 дня или 1 недели или 1 года - все они будут рассматриваться так, как если бы max-age
составлял 1 день.
Поставщики браузеров хотят, чтобы разработчики случайно не выкатили "сломанный" или "глючный" service-worker.js
, который обслуживается с max-age
в течение 1 года, оставив пользователям то, что может быть постоянным, сломанным веб-интерфейсом для длительный период времени. (Вы не можете полагаться на своих пользователей, зная, что они очищают данные своего сайта или перегружают сайт.)
Некоторые разработчики предпочитают явно обслуживать свои service-worker.js
с заголовками ответов, заставляя все кэширование HTTP быть отключенными, что означает, что сетевой запрос для service-worker.js
создается для каждой навигации. Другой подход может заключаться в использовании очень короткого времени max-age
- на минуту - для обеспечения некоторой степени дросселирования в случае, если существует очень большое количество быстрых навигаций от одного пользователя. Если вы действительно хотите свести к минимуму запросы и уверены, что в ближайшее время вы не будете обновлять свой service-worker.js
, вы можете установить max-age
в течение 24 часов, но я бы рекомендовал пойти с чем-то коротким, вам неожиданно нужно перераспределить.