Web Workers API
Web Workers ÑÑо Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼, коÑоÑÑй позволÑÐµÑ ÑкÑипÑÑ Ð²ÑполнÑÑÑÑÑ Ð² Ñоновом поÑоке, коÑоÑÑй оÑделен Ð¾Ñ Ð¾Ñновного поÑока веб-пÑиложениÑ. ÐÑеимÑÑеÑÑво заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо ÑеÑÑÑÑоÑмкие вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð²ÑполнÑÑÑÑÑ Ð² оÑделÑном поÑоке, позволÑÑ Ð·Ð°Ð¿ÑÑÑиÑÑ Ð¾Ñновной (обÑÑно полÑзоваÑелÑÑкий) поÑок без блокиÑовки и замедлениÑ.
ÐонÑепÑии и иÑполÑзование Web воÑкеÑов
Worker (ÑабоÑник, воÑкеÑ) - ÑÑо обÑÐµÐºÑ ÑозданнÑй пÑи помоÑи конÑÑÑÑкÑоÑа (напÑимеÑ, Worker()), коÑоÑÑй запÑÑÐºÐ°ÐµÑ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ñй Ñайл JavaScript - ÑÑÐ¾Ñ Ñайл ÑодеÑÐ¶Ð¸Ñ ÐºÐ¾Ð´, коÑоÑÑй бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð² поÑоке воÑкеÑа; воÑкеÑÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð² дÑÑгом глобалÑном конÑекÑÑе оÑлиÑном Ð¾Ñ ÑекÑÑего конÑекÑÑа window. ÐÑÐ¾Ñ ÐºÐ¾Ð½ÑекÑÑ Ð¿ÑедÑÑавлен обÑекÑом DedicatedWorkerGlobalScope в ÑлÑÑае ÑпеÑиализиÑованнÑÑ
воÑкеÑов (ÑÑандаÑÑнÑе воÑкеÑÑ, коÑоÑÑе иÑполÑзÑÑÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ ÑкÑипÑом, обÑие воÑкеÑÑ Ð¸ÑполÑзÑÑÑ SharedWorkerGlobalScope).
ÐÑ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ Ð»Ñбой код, коÑоÑÑй вам нÑавиÑÑÑ Ð²Ð½ÑÑÑи поÑока воÑкеÑа, за некоÑоÑÑми иÑклÑÑениÑми. ÐапÑимеÑ, Ð²Ñ Ð½Ðµ можеÑе напÑÑмÑÑ Ð¼Ð°Ð½Ð¸Ð¿ÑлиÑоваÑÑ DOM внÑÑÑи воÑкеÑа или иÑполÑзоваÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе меÑÐ¾Ð´Ñ Ð¸ ÑвойÑÑва по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа window. Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð±Ð¾Ð»ÑÑое колиÑеÑÑво ÑвойÑÑв и меÑодов, доÑÑÑпнÑÑ
в window, вклÑÑÐ°Ñ WebSockets, и меÑ
анизм Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
Ñакой, как IndexedDB или Data Store API, коÑоÑÑй доÑÑÑпен ÑолÑко в ÐС Firefox. Ðа дополниÑелÑной инÑоÑмаÑией ÑмоÑÑиÑе ФÑнкÑии и клаÑÑÑ Ð´Ð¾ÑÑÑпнÑе воÑкеÑам.
ÐаннÑе оÑпÑавлÑÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾Ñоком воÑкеÑа и оÑновнÑм поÑоком ÑеÑез ÑиÑÑÐµÐ¼Ñ ÑообÑений - обе ÑÑоÑÐ¾Ð½Ñ Ð¾ÑпÑавлÑÑÑ Ñвои ÑообÑÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼ÐµÑода postMessage () и оÑвеÑаÑÑ Ð½Ð° ÑообÑÐµÐ½Ð¸Ñ ÑеÑез обÑабоÑÑик ÑобÑÑÐ¸Ñ onmessage (ÑообÑение ÑодеÑжиÑÑÑ Ð² аÑÑибÑÑе даннÑÑ
ÑобÑÑÐ¸Ñ Message. ÐаннÑе копиÑÑÑÑÑÑ, а не иÑполÑзÑÑÑÑÑ ÑовмеÑÑно.
ÐоÑкеÑÑ Ð¼Ð¾Ð³ÑÑ, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, ÑоздаваÑÑ Ð½Ð¾Ð²ÑÑ
воÑкеÑов, в ÑÑом ÑлÑÑае они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же пÑоиÑÑ
ождение - ÑодиÑелÑÑкÑÑ ÑÑÑаниÑÑ. ÐÑоме Ñого, воÑкеÑÑ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑ XMLHttpRequest Ð´Ð»Ñ ÑеÑевого ввода-вÑвода, за иÑклÑÑением Ñого, ÑÑо аÑÑибÑÑÑ responseXML и channel на XMLHttpRequest вÑегда возвÑаÑаÑÑ Ð·Ð½Ð°Ñение null.
Рдополнение к ÑпеÑиализиÑованнÑм ÑÑÑеÑÑвÑÑÑ Ð¸ дÑÑгие Ð²Ð¸Ð´Ñ Ð²Ð¾ÑкеÑов:
- СовмеÑÑнÑе воÑкеÑÑ - ÑÑо воÑкеÑÑ, коÑоÑÑе могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð½ÐµÑколÑкими ÑкÑипÑами ÑовмеÑÑно, ÑабоÑаÑÑими в ÑазнÑÑ
окнаÑ
, IFrames и Ñ.д. в пÑеделаÑ
одного домена, ÑÑо и воÑкеÑ. Ðни немного Ñложнее, Ñем ÑпеÑиализиÑованнÑе воÑкеÑÑ - ÑкÑипÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑвÑзÑваÑÑÑÑ ÑеÑез акÑивнÑй поÑÑ. ÐодÑобнее Ñм.
SharedWorker. - ServiceWorkers по ÑÑÑи дейÑÑвÑÑÑ ÐºÐ°Ðº пÑокÑи-ÑеÑвеÑÑ, коÑоÑÑе Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð²ÐµÐ±-пÑиложениÑми, а Ñакже бÑаÑзеÑом и ÑеÑÑÑ (еÑли доÑÑÑпнÑ). Ðомимо пÑоÑего они пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑÑекÑивного авÑономного взаимодейÑÑвиÑ, пеÑÐµÑ Ð²Ð°Ñа ÑеÑевÑÑ Ð·Ð°Ð¿ÑоÑов и пÑинÑÑÐ¸Ñ ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ð¼ÐµÑ Ð½Ð° оÑнове доÑÑÑпноÑÑи ÑеÑи и Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° ÑеÑвеÑе. Ðни Ñакже позволÑÑ Ð´Ð¾ÑÑÑп к push-ÑведомлениÑм и API-инÑеÑÑейÑам Ñоновой ÑÐ¸Ð½Ñ ÑонизаÑии.
- ÐоÑкеÑÑ Ð² Chrome - ÑÑо воÑкеÑÑ ÑпеÑиалÑного Ñипа Firefox, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ, еÑли Ð²Ñ ÑазÑабаÑÑваеÑе надÑÑÑойки и Ñ
оÑиÑе иÑполÑзоваÑÑ Ð²Ð¾ÑкеÑÑ Ð² ÑаÑÑиÑениÑÑ
и имеÑÑ Ð´Ð¾ÑÑÑп к js-ctypes в ваÑем воÑкеÑе. СмоÑÑиÑе Ñакже
ChromeWorker. - Audio Workers(аÑдио воÑкеÑÑ) обеÑпеÑиваÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿ÑÑмой обÑабоÑки аÑдиозапиÑей в ÑÐ°Ð¼ÐºÐ°Ñ Ð²ÐµÐ±-конÑекÑÑа воÑкеÑа.
ÐÑимеÑание: Ð ÑооÑвеÑÑÑвии Ñ Web workers Spec, ÑобÑÑÐ¸Ñ Ð¾Ñибок воÑкеÑов не Ð´Ð¾Ð»Ð¶Ð½Ñ "вÑплÑваÑÑ" (ÑмоÑÑиÑе Firefox bug 1188141. Такое поведение бÑло Ñеализовано в Firefox 42.
ÐнÑеÑÑейÑÑ Web воÑкеÑа
AbstractWorker-
ÐбÑÑÑакÑнÑе ÑвойÑÑва и меÑÐ¾Ð´Ñ Ð¾Ð±Ñие Ð´Ð»Ñ Ð²ÑÐµÑ Ñипов воÑкеÑов (Ñ.е.
WorkerилиSharedWorker). Worker-
ÐÑедÑÑавлÑÐµÑ Ð¿Ð¾Ñок иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð¾ÑкеÑа, позволÑÑÑий пеÑедаваÑÑ ÑообÑÐµÐ½Ð¸Ñ ÑекÑÑÐµÐ¼Ñ ÐºÐ¾Ð´Ñ Ð²Ð¾ÑкеÑа.
-
ÐÑедÑÑавлÑÐµÑ ÐºÐ¾Ð½ÐºÑеÑнÑй вид воÑкеÑа, к коÑоÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ Ð´Ð¾ÑÑÑп из неÑколÑÐºÐ¸Ñ ÐºÐ¾Ð½ÑекÑÑов, бÑÐ´Ñ Ñо неÑколÑко окон, iframe или даже воÑкеÑов.
WorkerGlobalScope-
Represents the generic scope of any worker (doing the same job as
Windowdoes for normal web content). Different types of worker have scope objects that inherit from this interface and add more specific features. DedicatedWorkerGlobalScope-
Represents the scope of a dedicated worker, inheriting from
WorkerGlobalScopeand adding some dedicated features. -
Represents the scope of a shared worker, inheriting from
WorkerGlobalScopeand adding some dedicated features. -
ÐÑедÑÑавлÑÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¸ ÑоÑÑоÑние полÑзоваÑелÑÑкого агенÑа (клиенÑа).
ÐÑимеÑÑ
ÐÑ Ñоздали паÑÑ Ð¿ÑоÑÑÑÑ Ð´ÐµÐ¼Ð¾Ð½ÑÑÑаÑионнÑÑ Ð¿ÑогÑамм ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ Ð¾ÑÐ½Ð¾Ð²Ñ Ð¸ÑполÑзованиÑ:
- ÐазовÑй пÑÐ¸Ð¼ÐµÑ Ð¾ÑделÑного воÑкеÑа (запÑÑÐºÐ°ÐµÑ Ð¾ÑделÑного воÑкеÑа).
- ÐазовÑй пÑÐ¸Ð¼ÐµÑ ÑазделÑемого воÑкеÑа (запÑÑÐºÐ°ÐµÑ ÑазделÑемого воÑкеÑа).
ÐолÑÑе инÑоÑмаÑии о Ñом, как ÑабоÑаÑÑ ÑÑи демонÑÑÑаÑионнÑе пÑогÑаммÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе найÑи в ÑÑаÑÑе ÐÑполÑзование Web воÑкеÑов.
СпеÑиÑикаÑии
| Specification |
|---|
| HTML Living Standard # workers |
СмоÑÑиÑе Ñакже
- ÐÑполÑзование Web воÑкеÑов
- Worker Interface
- ÐнÑеÑÑÐµÐ¹Ñ SharedWorker
- ServiceWorker API
- ФÑнкÑии и клаÑÑÑ Ð´Ð¾ÑÑÑпнÑе воÑкеÑам
- ÐÑодвинÑÑÑе конÑепÑии и пÑимеÑÑ
- ChromeWorker: Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾ÑкеÑов в пÑивелегиÑованном/chrome коде