2016-08-09 1 views
33

По this doc on MDN:служба работник JavaScript частота обновления (каждые 24 часа?)

После этого загружается каждые 24 часов или около того. Он может быть загружен чаще, но он должен быть загружен каждые 24 часа в , чтобы предотвратить неправильные скрипты из-за слишком долгого раздражения.

То же самое верно для Firefox и Chrome? ИЛИ выполняет обновление для рабочего пользователя службы javascript, только когда пользователь переходит на сайт?

ответ

85

Примечание: 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 часа, но я бы рекомендовал пойти с чем-то коротким, когда вам неожиданно понадобится перераспределить.

+0

спасибо Джефф за хорошее объяснение. разъяснил все запросы. –

+0

Что произойдет, если вызов службы-службы перехвачен в извлечении и кэшировании. Это также истекает через день. – Pankaj

+1

Обработчик события 'fetch' сотрудника службы не запускается, когда страница запрашивает сценарий рабочего сервера для регистрации. –