--- title: Web Workers API slug: Web/API/Web_Workers_API tags: - API - NeedsTranslation - Service Workers - Shared Workers - TopicStub - Web Workers - Workers translation_of: Web/API/Web_Workers_API ---

{{DefaultAPISidebar("Web Workers API")}}

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

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

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

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

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

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

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

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

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

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

Примеры

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

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

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

Спецификация Статус Комментарий
{{SpecName('HTML WHATWG', '#toc-workers')}} {{Spec2('HTML WHATWG')}} Не отличается от {{SpecName("Web Workers")}}.
{{SpecName('Web Workers')}} {{Spec2('Web Workers')}} Initial definition.

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

{{CompatibilityTable}}
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Базовая поддержка 4 {{CompatGeckoDesktop(1.9.1)}} 10.0 10.6 4
Разделяемые воркеры 4 {{CompatGeckoDesktop(29)}} {{CompatNo}} 10.6 4
Передача данных через использование структурного клонирования 13 {{CompatGeckoDesktop(8)}} 10.0 11.5 6
Передача данных с использованием передаваемых объектов 17 {{property_prefix("webkit")}}
21
{{CompatGeckoDesktop(18)}} {{CompatNo}} 15 6
Глобальный {{domxref("window.URL", "URL")}} 10[1]
23
{{CompatGeckoDesktop(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 {{CompatGeckoMobile(1.9.1)}} 1.0.1 10.0 11.5 5.1
Разделяемые воркеры {{CompatNo}} 4 29 1.4 {{CompatNo}} {{CompatNo}} {{CompatNo}}
Передача данных через использование структурного клонирования {{CompatNo}} 4 8 1.0.1 {{CompatNo}} {{CompatNo}} {{CompatNo}}
Передача данных с использованием передаваемых объектов {{CompatNo}} {{CompatNo}} 18 1.0.1 {{CompatNo}} {{CompatNo}} {{CompatNo}}

[1] Как webkitURL.

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