Веб воркер
Веб воркер (енг. Web worker) дефинисан од стране WWW конзорцијума (World Wide Web Consortium) и WHATWG (Web Hypertext Application Technology Working Group) је Јаваскрипт скрипта која се извршава са HTML странице у позадини, независно од других скрипти корисничког интерфејса које такође могу бити извршаване са исте HTML стране.[1] Веб воркери могу да користе вишејезгарне процесоре веома ефективно.
W3C и WHATWG предвиђају веб воркере као дуготрајне скрипте које неће бити прекидане од стране корисничких скрипти (скрипте које реагују на кликове или друге интеракције корисника). Одржавање таквих воркера од прекида са корисничке стране треба да омогући веб страницама да остану прилагодљиве у исто време док извршавају дуготрајне процесе у позадини.
Најједноставнија употреба воркера је у извршавању рачунски скупих задатака без прекидања корисничког интерфејса.
W3C и WHATWG су тренутно у процесу развоја дефиниције АПИ-ја за веб воркере.[1]
Преглед
[уреди | уреди извор]Као што је и предвиђено од стране WHATWG, веб воркери су релтивно захтевни. Од њих је очекивано да су дуговечни, захтевају високу цену перформанси при покретању и високу цену у меморији по инстанци.[1]
Није намеравано нити очекивано да се веб воркери користе у великом броју јер могу да угуше системске ресурсе.
Веб воркери дозвољавају паралелно извршавање нити прегледача и једну или више Јаваскрипт нити покренутих у позадини. Прегледач који користи само једну нит извршавања мора да сачека Јаваскрипт програм да заврши са радом пре него што настави свој рад и ово може одузети значајно време, што је чињеница коју програмери воле да сакрију од корисника. Веб воркери дозвољавају прегледачу да настави нормално извршавање док они раде у позадини. Спецификација веб воркера[1] је засебни део HTML5 спецификације[2][3], а они се могу користити са HTML5.
Постоје два типа веб воркера:[1] посвећени и дељени воркери.
Када су веб воркери покренути у позадини, они немају директан приступ DOM-у ако комуницирају са документом преко слања порука. Ово омогућава вишенитно извршавање Јаваскрипт програма.
Карактеристике
[уреди | уреди извор]Веб воркери интерагују са главним документом преко слања порука. Следећи код прави воркера који ће извршити Јаваскрипт у датој датотеци.
var worker = new Worker("worker_script.js");
Да се пошаље порука воркеру, postMessage
метод воркер објекта је искорићен као у примеру испод.
worker.postMessage("Hello World!");
Својство onmessage
користи хватач догађаја да преузме информације од воркера.
worker.onmessage = function(event) {
alert("Received message " + event.data);
doSomething();
}
function doSomething() {
//do work
worker.postMessage("Work done!");
}
worker.terminate();
Једном када је воркер извршен, он нестаје из поља видљивости и променљива која показује на њега постаје недефинисана (undefined); у овом тренутку мора бити направљен нови воркер ако је потребан.
Пример
[уреди | уреди извор]Најједноставнија употреба веб воркера је за извршавање рачунски скупих операција без ометања корисничког интерфејса.
У овом примеру, главни документ користи веб воркер да израчуна просте бројеве, и постепено приказује последњи пронађени прост број.
Главна страница је дата испод:
<!DOCTYPE html>
<html>
<head>
<title>Worker example: One-core computation</title>
</head>
<body>
<p>The highest prime number discovered so far is: <output id="result"></output></p>
<script>
var worker = new Worker('worker.js');
worker.onmessage = function (event) {
document.getElementById('result').textContent = event.data;
};
</script>
</body>
</html>
Позив Worker()
конструктора прави веб воркер и враћа worker
објекат који представља сам веб воркер и који се даље користи за комуникацију са воркером. Хватач догађаја onmessage
допушта коду да добија поруке од веб воркера.
Сам пример веб воркера изгледа овако:
var n = 1;
search: while (true) {
n++;
for (var i = 2; i <= Math.sqrt(n); i++)
if (n % i == 0)
continue search;
// found a prime!
postMessage(n);
}
За слање поруке натраг страници, коришћен је postMessage()
метод да постави поруку када је пронађен прост број.[1]
Подршка
[уреди | уреди извор]Ако прегледач подржава веб воркере, Worker својство ће бити доступно на глобалном објекту прозора.[4] Worker својство ће бити недефинисано (undefined) ако прегледач не подржава воркере.
Следећи пример кода проверава да ли прегледач подржава веб воркере:
function browserSupportsWebWorkers() {
return typeof window.Worker === "function";
}
Веб воркери су тренутно подржани од стране Сафарија, Гугл Хрома, Опере, Интернет Експлорера (верзија 10) и Мозила Фајефокса.[3][5] Мобилна верзија Сафарија за иОС подржава веб воркере још од верзије иОС 5. Андроид прегледач је прво подржавао веб воркере у верзији Андроид 2.1, али је подршка уклоњена у верзијама Андроида од 2.2 до 4.3 пре него што је враћена у верзији Андроид 4.4.[6][7]
Види још
[уреди | уреди извор]Референце
[уреди | уреди извор]- ^ а б в г д ђ Web Workers, WHATWG, Архивирано из оригинала 22. 07. 2010. г., Приступљено 3. 6. 2010
- ^ HTML Standard
- ^ а б "Introducing HTML5", Lawson, B. and Sharp, R., 2011.
- ^ "HTML5 Up and Running" Mark Pilgrim. O'Reilly/Google Press. August 2010
- ^ "HTML5 and CSS3" Brian P. Hogan. The Pragmatic Programmers, LLC 2010.
- ^ „Архивирана копија”. Архивирано из оригинала 19. 10. 2013. г. Приступљено 22. 05. 2016.
- ^ Can I use... Support tables for HTML5, CSS3, etc
Спољашње везе
[уреди | уреди извор]- Спецификације
- Web Workers – W3C Архивирано на сајту Wayback Machine (7. јун 2015)
- Web Workers – WHATWG
- Прегледач
- Using Web Workers Архивирано на сајту Wayback Machine (7. мај 2012) – Mozilla Developer Center