MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Web Workers API

Переклад не закінчено. Будь ласка, допоможіть перекласти цю статтю з англійської.

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

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

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

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

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

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

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

  • Загальні workers - можуть бути використані декількома сценаріями, запускаючись в різних вікнах, IFrames, тощо, якщо вони у одному домені з worker. Вони трохи складніші, ніж виділені workers — скрипти мають спілкуватися через активний порт. Дивіться SharedWorker для більшї детальності.
  • ServiceWorkers по суті виступають в якості проксі-серверу, знаходячись між web-додатком, браузером й мережею (коли доступна). Вони призначені для того (зокрема іншого), щоб давати змогу створювати ефективний offline-функціонал, перехоплення мережевих запитів та прийняття відповідних заходів, основуючись на тому, чи доступна мережа, та поновювати данні більш переважними з серверу. Вони також дозволяють доступ для додавання сповіщень та фонових синхроних APIs.
  • Chrome Workers є Firefox-only типом worker, що можна використовуати, якщо розроблюється доповнення та бажано використовувати workers й мати доступ до js-ctypes у worker. Дивіться ChromeWorker для більшої детальності. 
  • Audio Workers забезпечуюсть можливість направляти сценарії обробки звуку відбуватися у контексті web worker.

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

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

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

Приклади

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

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

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

Specification Status Comment
WHATWG HTML Living Standard Living Standard No change from Web Workers.
Web Workers Editor's Draft Initial definition.

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

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 4 3.5 (1.9.1) 10.0 10.6 4
Shared workers 4 29 (29) No support 10.6 4
Passing data using structured cloning 13 8 (8) 10.0 11.5 6
Passing data using  transferable objects 17 webkit
21
18 (18) No support 15 6
Global URL 10[1]
23
21 (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 1.0 (1.9.1) 1.0.1 10.0 11.5 5.1
Shared workers No support 4 29 1.4 No support No support No support
Passing data using structured cloning No support 4 8 1.0.1 No support No support No support
Passing data using  transferable objects No support No support 18 1.0.1 No support No support No support

[1] As webkitURL.

See also

Мітки документа й учасники

 Зробили внесок у цю сторінку: curdwithraisins
 Востаннє оновлена: curdwithraisins,