Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Web Workers это механизм, который позволяет скрипту выполняться в фоновом потоке, который отделен от основного потока веб-приложения. Преимущество заключается в том, что кропотливая обработка может выполняться в отдельном потоке, позволяя запустить основной (обычно пользовательский) поток без блокировки и замедления.

Концепции и использование Web воркеров

Worker (работник, воркер)  - это объект созданный при помощи конструктора (например, Worker()), который запускает именованный файл JavaScript - этот файл содержит код, который будет запускаться в потоке воркера; воркеры запускаются в другом глобальном контексте отличном от текущего контекста window. Этот контекст представлен объектом DedicatedWorkerGlobalScope в случае специализированных воркеров (стандартные воркеры, которые используются одним скриптом, общие воркеры используют SharedWorkerGlobalScope).

Вы можете запустить любой код, который вам нравится внутри потока воркера, за некоторыми исключениями. Например, вы не можете напрямую манипулировать DOM внутри воркера или использовать некоторые методы и свойства по умолчанию объекта window. Но вы можете использовать большое количество свойств и методов, доступных в window, включая WebSockets, и механизм хранения данных такой, как IndexedDB или Data Store API, который доступен только в ОС Firefox. За дополнительной информацией смотрите Функции и классы доступные воркерам.

Данные отправляются между потоком воркера и основным потоком через систему сообщений - обе стороны отправляют свои сообщения с помощью метода postMessage () и отвечают на сообщения через обработчик события onmessage (сообщение содержится в атрибуте данных события  Message. Данные копируются, а не используются совместно.

Воркеры могут, в свою очередь, создавать новых воркеров, в этом случае они должны иметь одно и тоже происхождение - родительскую страницу. Кроме того, воркеры могут использовать XMLHttpRequest для сетевого ввода-вывода, за исключением того, что атрибуты responseXML и channel на XMLHttpRequest всегда возвращают значение null.

В дополнение к специализированным существуют и другие виды воркеров:

  • Совместные воркеры - это воркеры, которые могут использоваться несколькими скриптами совместно, работающими в разных окнах, IFrames и т.д. в пределах одного домена, что и воркер. Они немного сложнее, чем специализированные воркеры - скрипты должны связываться через активный порт. Подробнее см. SharedWorker.
  • ServiceWorkers по сути действуют как прокси-серверы, которые находятся между веб-приложениями, а также браузером и сетью (если доступны). Помимо прочего они предназначены для создания эффективного автономного взаимодействия, перехвата сетевых запросов и принятия соответствующих мер на основе доступности сети и обновления данных на сервере. Они также позволят доступ к push-уведомлениям и API-интерфейсам фоновой синхронизации.
  • Воркеры в Chrome - это воркеры специального типа Firefox, которые вы можете использовать, если вы разрабатываете надстройки и хотите использовать воркеры в расширениях и иметь доступ к js-ctypes в вашем воркере. Смотрите также ChromeWorker
  • Audio Workers(аудио воркеры) обеспечивают возможность прямой обработки аудиозаписей в рамках веб-контекста воркера.

Замечание: В соответствии с Web workers Spec, события ошибок воркеров не должны "всплывать" (смотрите  баг 1188141. Такое поведение было реализовано в Firefox 42.

Интерфейсы Web воркера

AbstractWorker
Абстрактные свойства и методы общие для всех типов воркеров (т.е. Worker или SharedWorker).
Worker
Представляет поток исполнения воркера, позволяющий передавать сообщения текущему коду воркера.
SharedWorker
Представляет конкретный вид воркера, к которому можно получить доступ из нескольких контекстов, будь то несколько окон, iframe или даже воркеров.
WorkerGlobalScope
Represents the generic scope of any worker (doing the same job as Window does for normal web content). Different types of worker have scope objects that inherit from this interface and add more specific features.
DedicatedWorkerGlobalScope
Represents the scope of a dedicated worker, inheriting from WorkerGlobalScope and adding some dedicated features.
SharedWorkerGlobalScope
Represents the scope of a shared worker, inheriting from WorkerGlobalScope and adding some dedicated features.
WorkerNavigator
Представляет идентификатор и состояние пользовательского агента (клиента).

Примеры

Мы создали пару простых демонстрационных программ чтобы показать основы использования:

Больше информации о том, как работают эти демонстрационные программы, вы можете найти в статье Использование Web воркеров.

Спецификации

Спецификация Статус Комментарий
HTML Living Standard Живой стандарт Не отличается от Unknown.
Unknown Неизвестно Initial definition.

Совместимость с браузерами

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Базовая поддержка 4 3.5 (1.9.1) 10.0 10.6 4
Разделяемые воркеры 4 29 (29) Нет 10.6 4
Передача данных через использование структурного клонирования 13 8 (8) 10.0 11.5 6
Передача данных с использованием передаваемых объектов 17 webkit
21
18 (18) Нет 15 6
Глобальный URL 10[1]
23
21 (21) 11 15 6[1]
Feature Android Chrome for Android Firefox Mobile (Gecko) Firefox OS (Gecko) IE Phone Opera Mobile Safari Mobile
Базовая поддержка 4.4 4 1.0 (1.9.1) 1.0.1 10.0 11.5 5.1
Разделяемые воркеры Нет 4 29 1.4 Нет Нет Нет
Передача данных через использование структурного клонирования Нет 4 8 1.0.1 Нет Нет Нет
Передача данных с использованием передаваемых объектов Нет Нет 18 1.0.1 Нет Нет Нет

[1] Как webkitURL.

Смотрите также

Метки документа и участники

Внесли вклад в эту страницу: aadm2014, ivaskonyan, utking, Sebastianz
Обновлялась последний раз: aadm2014,