Веб воркер

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу

Веб воркер (енг. 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]

Види још[уреди]

Референце[уреди]

  1. 1,0 1,1 1,2 1,3 1,4 1,5 Web Workers, WHATWG, Приступљено 3. 6. 2010 
  2. ^ http://dev.w3.org/html5/spec/overview.html
  3. 3,0 3,1 "Introducing HTML5", Lawson, B. and Sharp, R., 2011.
  4. ^ "HTML5 Up and Running" Mark Pilgrim. O'Reilly/Google Press. August 2010
  5. ^ "HTML5 and CSS3" Brian P. Hogan. The Pragmatic Programmers, LLC 2010.
  6. ^ „Архивирана копија”. Архивирано из оригинала на датум 19. 10. 2013. Приступљено 22. 05. 2016. 
  7. ^ http://caniuse.com/#search=worker

Спољашње везе[уреди]

Спецификације
Прегледач