--- 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 это механизм, который позволяет скрипту выполняться в фоновом потоке, который отделен от основного потока веб-приложения. Преимущество заключается в том, ресурсоёмкие вычисления могут выполняться в отдельном потоке, позволяя запустить основной (обычно пользовательский) поток без блокировки и замедления.
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 воркеров.
Спецификация | Статус | Комментарий |
---|---|---|
{{SpecName('HTML WHATWG', '#toc-workers')}} | {{Spec2('HTML WHATWG')}} | Не отличается от {{SpecName("Web Workers")}}. |
{{SpecName('Web Workers')}} | {{Spec2('Web Workers')}} | Initial definition. |
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
.