Ночные Работники Службы | Модель

Ночные Работники Службы | Модель

Оглавление

2.1 Работник службы — Service Worker
2.1.1 Продолжительность жизни Работника Службы — Lifetime
2.1.2 События Работника Службы — Events

2.2 Расписание Работника Службы — Service Worker Timing

2.3 Регистрация Работника Службы — Service Worker Registration
2.3.1 Продолжительность жизни Регистрации Работника Службы — Lifetime

2.4 Клиент Работника Службы — Service Worker Client

2.5 Контроль и использование — Control and Use
2.5.1 Случай клиента окна — The window client case
2.5.2 Случай клиента работника — The worker client case

2.6 Источники задач — Task Sources

2.7 Завершение работы пользовательского агента — User Agent Shutdown

 

2.1 Работник Службы

Работник Службы (service worker) — это разновидность веб-работника. Работник службы выполняется в источнике регистрирующего клиента работника службы.

Работник службы имеет связанное состояние (state), которое может быть одним из:

  • «parsed» — синтаксически проанализированный
  • «installing» — устанавливающий
  • «installed» — установленный
  • «activating» — активирующий
  • «activated» — активированный
  • «redundant» — избыточный

Изначально «parsed«.

 

У работника службы есть связанный URL-адрес скрипта (script url) (URL-адрес).

Работник службы имеет связанный тип (type), который является либо «classic«, либо «module«. Если не указано иное, это «classic«.

Работник службы имеет связанную регистрацию содержащую работника службы (containing service worker registrationрегистрация работника службы), которая содержит самого себя.

Работник службы имеет связанный глобальный объект (global object — объект ServiceWorkerGlobalScope или значение null).

Работник службы имеет связанный ресурс сценария (script resourceсценарий), который представляет его собственный ресурс сценария. Изначально установлено значение null.

Ресурс сценария имеет связанный флаг когда-либо оценивался (has ever been evaluated flag). Он изначально не установлен.

Ресурс сценария имеет связанный контейнер политики (policy containerконтейнер политики). Изначально это новый контейнер политики.

У работника службы есть связанная карта ресурсов сценария (script resource map), которая представляет собой упорядоченную карту, где ключи являются URL-адресами, а значения — ответами.

У работника службы есть связанный набор используемых скриптов (set of used scriptsнабор), элементом которого является URL. Изначально это новый набор.

Примечание

Набор используемых сценариев используется только для удаления неиспользуемых ресурсов с карты нового исполнителя после установки, которые были заполнены на основе карты старого исполнителя во время проверки обновлений.

У работника службы есть связанный флаг ожидания пропуска (skip waiting flag). Если не указано иное, он не установлен.

У работника службы есть связанный флаг импорта классических скриптов (classic scripts imported flag). Он изначально не установлен.

У работника службы есть связанный набор типов событий для обработки (set of event types to handleнабор), элемент которого является типом события прослушивателя событий. Изначально это новый набор.

Работник службы имеет связанный набор расширенных событий (set of extended eventsнабор), элементом которого является ExtendableEvent. Изначально это новый набор.

Работник службы имеет связанный начальный статус (start status), который может быть нулевым или Завершённым. Изначально он равен null.

Говорят, что работник службы работает (running), если его цикл событий запущен.

 

2.1.1. Продолжительность жизни Работника Службы

Время жизни работника службы связано со временем выполнения событий, а не со ссылками, хранящимися клиентами работника службы на объект ServiceWorker.

Пользовательский агент может прекратить работу работника службы в любое время:

  • Нет события для обработки.
  • Обнаруживает ненормальную работу: например, бесконечные циклы и задачи, превышающие установленные временные ограничения (если таковые имеются) при обработке событий.

 

2.1.2. События Работника Службы

Спецификация «Service Workers» определяет события работника службы (service worker events — каждое из которых является событием), которые включают (см. Список):

  • События жизненного цикла (Lifecycle events): install (установить) и activate (активировать).
  • Функциональные события (Functional events): fetch (выборка) и events (события), определенные другими спецификациями, расширяющими спецификацию Service Workers. (См. Список.)
  • message (сообщение) и messageerror (ошибка сообщения).

 

2.2. Расписание Работника Службы

Работники службы отмечают определенные моменты времени, которые позже отображаются с помощью API времени навигации.

Информация о времени работника службы (service worker timing info) — это структура. В нем есть следующие элементы:

начальное время — start time

DOMHighResTimeStamp, изначально 0.

время отправки события выборки — fetch event dispatch time

DOMHighResTimeStamp, изначально 0.

 

2.3. Регистрация Работника Службы

Регистрация работника службы (service worker registration) — это кортеж из URL-адреса области и набора работников службы, устанавливающего работника, ожидающего работника и активного воркера. Пользовательский агент может разрешить множество регистраций работника службы в одном источнике, если URL-адрес области регистрации работника службы отличается. Регистрация работника службы с идентичным URL-адресом области, когда он уже существует в пользовательском агенте, вызывает замену существующей регистрации работника службы.

У регистрации работника службы есть связанный URL-адрес области (scope urlURL-адрес).

С регистрацией работника службы связан устанавливающий работник (installing workerработник службы или null), состояние которого — «installing«. Изначально установлено значение null.

С регистрацией работника службы связан ожидающий работник (waiting workerработник службы или null), состояние которого — «installed«. Изначально установлено значение null.

С регистрацией работника службы связан активный работник (active workerработник службы или null), состояние которого либо «activating«, либо «activated«. Изначально установлено значение null.

С регистрацией работника службы связано время последней проверки обновлений (last update check time). Изначально установлено значение null.

Регистрация работника службы считается устаревшей (stale), если время последней проверки обновления регистрации не равно null и разница во времени в секундах, рассчитанная по текущему времени минус время последней проверки обновления регистрации, превышает 86400 (24 часа).

С регистрацией работника службы связано обновление в режиме кэширования (update via cache mode): «imports«, «all» или «none«. Изначально установлено значение «imports«.

Регистрация работника службы имеет одну или несколько очередей задач (task queues), которые создают резервные копии задач из соответствующих очередей задач цикла событий активного работника. (Источниками целевых задач для этой операции резервного копирования являются источник задачи выборки дескриптора и источник задачи функционального события дескриптора.) Агент пользователя выгружает задачи активного работника в очереди задач регистрации работника службы, когда активный работник завершается и повторно ставится в очередь задач, эти задачи в соответствующие очереди задач цикла событий активного работника, когда активный работник прекращает работу. В отличие от очередей задач, принадлежащих циклам событий, очереди задач регистрации работника службы не обрабатываются никакими циклами событий сами по себе.

С регистрацией работника службы связан объект NavigationPreloadManager.

С регистрацией работника службы связан флаг включения предварительной загрузки навигации (navigation preload enabled flag). Он изначально не установлен.

Регистрация работника службы имеет связанное значение заголовка предварительной загрузки навигации (navigation preload header value), которое представляет собой последовательность байтов. Изначально установлено значение `true`.

Регистрация работника службы считается незарегистрированной (unregistered), если область действия карты регистрации [этот URL-адрес области регистрации служебного работника] не является этой регистрацией работника службы.

 

2.3.1. Продолжительность жизни Регистрации Работника Службы

Пользовательский агент должен постоянно вести список зарегистрированных регистраций работников службы, если иное не отменено явным образом. У пользовательского агента есть область действия для карты регистрации, в которой хранятся записи кортежа URL-адреса области регистрации работника службы, сериализованные, и соответствующая регистрация работника службы. Время жизни регистраций работников службы превышает время жизни объектов ServiceWorkerRegistration, которые представляют их в течение времени жизни их соответствующих клиентов работников службы.

 

2.4. Клиент Работника Службы

Клиент работника службы (service worker client) — это среда.

У клиента работника службы есть связанный флаг отмены (discarded flag). Он изначально не установлен.

У каждого клиента работника службы есть следующие этапы удаления среды:

Установить флаг отклонения клиента client.

Примечание

Реализации могут отбрасывать клиентов, для которых установлен флаг отмены.

У клиента работника службы есть алгоритм, определенный как источник (origin), который возвращает источник клиента работника службы, если клиент работника службы является объектом настроек среды, и источник URL создания клиента работника службы в противном случае.

Клиент окна (window client) — это клиент работника службы, глобальным объектом которого является объект Window.

Выделенный клиент работника (dedicated worker client) — это клиент работника службы, глобальным объектом которого является объект DedicatedWorkerGlobalScope.

Клиент общего работника (shared worker client) — это клиент работника службы, глобальным объектом которого является объект SharedWorkerGlobalScope.

Клиент работника (worker client) — это либо выделенный клиент работника, либо клиент общего работника.

 

2.5. Контроль и использование

У клиента работника службы есть активный работник службы, который обслуживает свою загрузку и свои подресурсы. Когда у клиента работника службы есть ненулевой активный работник службы, говорят, что он контролируется (controlled) этим активным работником службы. Когда клиент работника службы контролируется работником службы, говорят, что он использует (using) работника службы, содержащего регистрацию работника службы. Активный работник службы клиента работника службы определяется, как описано в следующих подразделах.

Остальная часть раздела не является нормативной.

Проблема 1

Поведение в этом разделе еще полностью не определено и будет определено в стандарте HTML. Работа отслеживается по проблеме и запросу на вытягивание.

 

2.5.1. Случай клиента окна

Клиент окна создаётся, когда создаётся контекст просмотра и когда он перемещается.

Когда клиент окна создаётся в процессе создания контекста просмотра:

Если исходным источником активного документа контекста просмотра является непрозрачный источник, активному работнику службы оконного клиента присваивается значение null. В противном случае он устанавливается равным активному работнику службы клиента работника службы создателя документа.

Когда клиент окна создаётся в процессе навигации по контексту просмотра:

Если выборка маршрутизируется через HTTP-выборку, активный работник службы оконного клиента устанавливается на результат сопоставления регистрации работника службы. В противном случае, если источник созданного документа является непрозрачным источником или не совпадает с источником документа его создателя, активному работнику службы оконного клиента присваивается значение null. В противном случае он устанавливается равным активному работнику службы клиента работника службы создателя документа.

 

Примечание

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

 

Примечание

Изолированные фреймы <iframe> без директив песочницы, allow-same-origin и allow-scripts приводят к тому, что значение активного работника службы равно null, поскольку их источник является непрозрачным источником.

 

2.5.2. Случай клиента работника

Клиент работника создаётся, когда пользовательский агент запускает рабочего.

Когда клиент работника создан:

Когда выборка маршрутизируется через HTTP-выборку, активный работник службы клиента работника устанавливается на результат сопоставления регистрации работника службы. В противном случае, если источник клиента работника является непрозрачным источником или URL-адрес запроса является URL-адресом большого двоичного объекта, а источник клиента работника не совпадает с источником последнего элемента в наборе владельцев глобального объекта клиента работника, активный работник службы клиента работника имеет значение null. В противном случае он устанавливается равным активному работнику службы объекта настроек среды последнего элемента в наборе владельцев глобального объекта клиента работника.

Примечание

Клиенты окна и клиенты работника с URL-адресом data: приводят к тому, что для активного работника службы значение null, поскольку их источник является непрозрачным источником. Клиенты окна и клиенты работника с URL-адресом большого двоичного объекта могут наследовать активного работника службы своего создателя документа или владельца, но если источник запроса не совпадает с источником их создателя документа или владельца, для активного работника службы устанавливается значение null.

 

2.6. Источники задач

Работники службы используют следующие дополнительные источники задач.

Источник задачи получения дескриптора — handle fetch task source

Этот источник задачи используется для отправки событий выборки fetch работникам службы.

Источник задачи обработки функциональных событий — handle functional event task source

Этот источник задач используется для функций, которые отправляют другие функциональные события, например события push, работникам службы.

Примечание

Агент пользователя может использовать отдельный источник задач для каждого типа функционального события, чтобы избежать явления блокировки заголовка для определенных функциональных событий.

 

2.7. Завершение работы пользовательского агента

Пользовательский агент должен поддерживать состояние своих сохранённых регистраций работников службы при перезапусках в соответствии со следующими правилами:

Для этого пользовательский агент должен вызывать «Обработку завершения работы агента пользователя» (Handle User Agent Shutdown), когда он завершает свою работу.

 

Информационные ссылки

Стандарт Service Workers Nightlyhttps://w3c.github.io/ServiceWorker/#model