--- 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) потоку працювати без блокування/сповільнення.
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 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. |
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
.