This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Web Workers API
Web Workers это механизм, который позволяет скрипту выполняться в фоновом потоке, который отделен от основного потока веб-приложения. Преимущество заключается в том, что ресурсоёмкие вычисления могут выполняться в отдельном потоке, позволяя запустить основной (обычно пользовательский) поток без блокировки и замедления.
In this article
Концепции и использование 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, события ошибок воркеров не должны "всплывать" (смотритеFirefox bug 1188141. Такое поведение было реализовано в Firefox 42.
Интерфейсы Web воркера
AbstractWorkerАбстрактные свойства и методы общие для всех типов воркеров (т.е.
WorkerилиSharedWorker).WorkerПредставляет поток исполнения воркера, позволяющий передавать сообщения текущему коду воркера.
SharedWorkerПредставляет конкретный вид воркера, к которому можно получить доступ из нескольких контекстов, будь то несколько окон, iframe или даже воркеров.
WorkerGlobalScopeRepresents the generic scope of any worker (doing the same job as
Windowdoes for normal web content). Different types of worker have scope objects that inherit from this interface and add more specific features.DedicatedWorkerGlobalScopeRepresents the scope of a dedicated worker, inheriting from
WorkerGlobalScopeand adding some dedicated features.SharedWorkerGlobalScopeRepresents the scope of a shared worker, inheriting from
WorkerGlobalScopeand adding some dedicated features.WorkerNavigatorПредставляет идентификатор и состояние пользовательского агента (клиента).
Примеры
Мы создали пару простых демонстрационных программ чтобы показать основы использования:
- Базовый пример отдельного воркера (запускает отдельного воркера).
- Базовый пример разделяемого воркера (запускает разделяемого воркера).
Больше информации о том, как работают эти демонстрационные программы, вы можете найти в статьеИспользование Web воркеров.
Спецификации
| Specification |
|---|
| HTML Living Standard # workers |
Смотрите также
- Использование Web воркеров
- Worker Interface
- Интерфейс SharedWorker
- ServiceWorker API
- Функции и классы доступные воркерам
- Продвинутые концепции и примеры
- ChromeWorker: для использования воркеров в привелегированном/chrome коде