--- title: Web Workers API slug: Web/API/Web_Workers_API translation_of: Web/API/Web_Workers_API ---

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

Web Workers це механізм, який дозволяє запускати скрипові операції  у фоновому потоці, окремо від основного діючого потоку web-додатку. Перевага цього методу в тому, що трудоміські процеси можуть виконуватися в окромому потоці, дозволяючи основному (зазвичай UI) потоку працювати без блокування/сповільнення.

Концепція та використання Web Workers

Worker це об'єкт, який створюється з використанням конструктору (e.g. {{domxref("Worker.Worker", "Worker()")}}), який запускає вказаний JavaScript-файл — файл, який містить код, що буде запущений у робочому потоці; workers запускаються у іншому глобальному контексті, який не є поточним {{domxref("window")}}. Цей контекст представляюється об'єктом  {{domxref("DedicatedWorkerGlobalScope")}} у разі виділеного workers (стандартний workers, які використовуються одним сценарієм; загальні workers використовують {{domxref("SharedWorkerGlobalScope")}}).

У потоці workers можна запускати будь-який код з невеликкими винятками. Наприклад, не можна напряму маніпулювати DOM з worker або використовувати деякі стандартні методи та властивості об'єкту {{domxref("window")}}, але можна використовувати велику кількість речей, доступних з window, включаючи WebSockets, та механізми зберігання даних, як IndexedDB та Firefox OS-only Data Store API.  Дивіться Функції та класи, доступні для workers для більшої детальності.

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

Workers можуть в свою чергу породжувати нові workers, за умови, що ці workers будуть розміщуватися в межах однієї й тієї ж самої сорінки, що й батьківський worker.  На додаток, workers можуть використовувати XMLHttpRequest для мережевого В/В, за винятком того, що responseXML та channel атрибути XMLHttpRequest завжди повертають null.

Окрім виділених workers, є й інши типи:

Примітка: Згіздно з Web workers Spec, події помилок worker не повинні вспливати (дивіться {{bug(1188141)}}. Це було реалізовано у Firefox 42.

Інтерфейси Web Worker

{{domxref("AbstractWorker")}}
Абстрактні властивості та методи, загальні для всіх видів workers ({{domxref("Worker")}} або {{domxref("SharedWorker")}}).
{{domxref("Worker")}}
Представляє собою діючий поток worker, дозволяючи передавати сповіщення запущеному коду worker.
{{domxref("SharedWorker")}}
Представляє собою специфічний вид worker, який може бути доступний з декількох контекстів браузерів, будучи декількома вікнами, iframes або іншими workers.
{{domxref("WorkerGlobalScope")}}
Представляє собою загальний scope будь-якого worker (виконуючи ту ж роботу, що й {{domxref("Window")}} для звичайного контенту web). Різні види worker мають об'єкт scope, який наслідується з цього інерфейсу та додає більше специфічних особливостей.
{{domxref("DedicatedWorkerGlobalScope")}}
Представляє собою scope виділеного worker, наслудуючись з {{domxref("WorkerGlobalScope")}} та додаючи деякі  особливості.
{{domxref("SharedWorkerGlobalScope")}}
Представляє собою scope загального worker, наслідуючись з {{domxref("WorkerGlobalScope")}} та додаючи деякі особливості.
{{domxref("WorkerNavigator")}}
Представляє собою ідентифікатор та стан користувача (клієнта):

Приклади

Ми створили декілька простих прикладів, щоб показати основне вікористання:

Ви можете знайти більше інформації як працюють ці демо у Використання web workers.

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

Specification Status Comment
{{SpecName('HTML WHATWG', '#toc-workers')}} {{Spec2('HTML WHATWG')}} No change from {{SpecName("Web Workers")}}.
{{SpecName('Web Workers')}} {{Spec2('Web Workers')}} Initial definition.

Сумісність з браузерами

{{CompatibilityTable}}
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 4 {{CompatGeckoDesktop(1.9.1)}} 10.0 10.6 4
Shared workers 4 {{CompatGeckoDesktop(29)}} {{CompatNo}} 10.6 4
Passing data using structured cloning 13 {{CompatGeckoDesktop(8)}} 10.0 11.5 6
Passing data using  transferable objects 17 {{property_prefix("webkit")}}
21
{{CompatGeckoDesktop(18)}} {{CompatNo}} 15 6
Global {{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
Basic support 4.4 4 {{CompatGeckoMobile(1.9.1)}} 1.0.1 10.0 11.5 5.1
Shared workers {{CompatNo}} 4 29 1.4 {{CompatNo}} {{CompatNo}} {{CompatNo}}
Passing data using structured cloning {{CompatNo}} 4 8 1.0.1 {{CompatNo}} {{CompatNo}} {{CompatNo}}
Passing data using  transferable objects {{CompatNo}} {{CompatNo}} 18 1.0.1 {{CompatNo}} {{CompatNo}} {{CompatNo}}

[1] As webkitURL.

See also