--- 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. |