Примечание: As of Firefox 57, поведение по умолчанию изменилось на счет updated service worker specification. В Firefox 57+ директивы кэширования HTTP по умолчанию будут игнорироваться при проверке сценария рабочего стола для обновлений. Приведенные ниже описание до сих пор относится к Chrome в октябре 2017.
Каждых раз при переходе на новую страницу, которая находится под сферой услуги работника, Chrome будет сделать стандартный запрос HTTP для ресурса JavaScript, который был принят, чтобы вызов navigator.serviceWorker.register()
. Предположим, что он назван service-worker.js
. Этот запрос выполняется только в сочетании с навигацией или когда работник службы проснулся через, например, событие push
. Существует не фоновый процесс, который повторяет каждый скрипт рабочего рабочего каждые 24 часа или что-то автоматическое.
Этот HTTP-запрос будет соответствовать стандарту HTTP cache directives, за одним исключением (который рассматривается в следующем абзаце). Например, если ваш сервер установил соответствующие заголовки HTTP-ответа, которые указывали, что кешированный ответ должен использоваться в течение 1 часа, то в течение следующего часа запрос браузера на service-worker.js
будет выполняться кешем браузера. Обратите внимание, что мы не говорят о Cache Storage API, что не имеет значения в этой ситуации, а скорее standard browser HTTP caching.
Единственное исключение из стандартных правил кеширования 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 часа, но я бы рекомендовал пойти с чем-то коротким, когда вам неожиданно понадобится перераспределить.
спасибо Джефф за хорошее объяснение. разъяснил все запросы. –
Что произойдет, если вызов службы-службы перехвачен в извлечении и кэшировании. Это также истекает через день. – Pankaj
Обработчик события 'fetch' сотрудника службы не запускается, когда страница запрашивает сценарий рабочего сервера для регистрации. –