Veb vorker (eng. Web worker) definisan od strane WWW konzorcijuma (World Wide Web Consortium) i WHATWG (Web Hypertext Application Technology Working Group) je Javaskript skripta koja se izvršava sa HTML stranice u pozadini, nezavisno od drugih skripti korisničkog interfejsa koje takođe mogu biti izvršavane sa iste HTML strane.[1] Veb vorkeri mogu da koriste višejezgarne procesore veoma efektivno.

W3C i WHATWG predviđaju veb vorkere kao dugotrajne skripte koje neće biti prekidane od strane korisničkih skripti (skripte koje reaguju na klikove ili druge interakcije korisnika). Održavanje takvih vorkera od prekida sa korisničke strane treba da omogući veb stranicama da ostanu prilagodljive u isto vreme dok izvršavaju dugotrajne procese u pozadini.

Najjednostavnija upotreba vorkera je u izvršavanju računski skupih zadataka bez prekidanja korisničkog interfejsa.

W3C i WHATWG su trenutno u procesu razvoja definicije API-ja za veb vorkere.[1]

Pregled uredi

Kao što je i predviđeno od strane WHATWG, veb vorkeri su reltivno zahtevni. Od njih je očekivano da su dugovečni, zahtevaju visoku cenu performansi pri pokretanju i visoku cenu u memoriji po instanci.[1]

Nije nameravano niti očekivano da se veb vorkeri koriste u velikom broju jer mogu da uguše sistemske resurse.

Veb vorkeri dozvoljavaju paralelno izvršavanje niti pregledača i jednu ili više Javaskript niti pokrenutih u pozadini. Pregledač koji koristi samo jednu nit izvršavanja mora da sačeka Javaskript program da završi sa radom pre nego što nastavi svoj rad i ovo može oduzeti značajno vreme, što je činjenica koju programeri vole da sakriju od korisnika. Veb vorkeri dozvoljavaju pregledaču da nastavi normalno izvršavanje dok oni rade u pozadini. Specifikacija veb vorkera[1] je zasebni deo HTML5 specifikacije[2][3], a oni se mogu koristiti sa HTML5.

Postoje dva tipa veb vorkera:[1] posvećeni i deljeni vorkeri.

Kada su veb vorkeri pokrenuti u pozadini, oni nemaju direktan pristup DOM-u ako komuniciraju sa dokumentom preko slanja poruka. Ovo omogućava višenitno izvršavanje Javaskript programa.

Karakteristike uredi

Veb vorkeri interaguju sa glavnim dokumentom preko slanja poruka. Sledeći kod pravi vorkera koji će izvršiti Javaskript u datoj datoteci.

var worker = new Worker("worker_script.js");

Da se pošalje poruka vorkeru, postMessage metod vorker objekta je iskorićen kao u primeru ispod.

worker.postMessage("Hello World!");

Svojstvo onmessage koristi hvatač događaja da preuzme informacije od vorkera.

worker.onmessage = function(event) {
	alert("Received message " + event.data);
	doSomething();
}

function doSomething() {
	//do work
	worker.postMessage("Work done!");
}

worker.terminate();

Jednom kada je vorker izvršen, on nestaje iz polja vidljivosti i promenljiva koja pokazuje na njega postaje nedefinisana (undefined); u ovom trenutku mora biti napravljen novi vorker ako je potreban.

Primer uredi

Najjednostavnija upotreba veb vorkera je za izvršavanje računski skupih operacija bez ometanja korisničkog interfejsa.

U ovom primeru, glavni dokument koristi veb vorker da izračuna proste brojeve, i postepeno prikazuje poslednji pronađeni prost broj.

Glavna stranica je data ispod:

<!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>

Poziv Worker() konstruktora pravi veb vorker i vraća worker objekat koji predstavlja sam veb vorker i koji se dalje koristi za komunikaciju sa vorkerom. Hvatač događaja onmessage dopušta kodu da dobija poruke od veb vorkera.

Sam primer veb vorkera izgleda ovako:

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);
}

Za slanje poruke natrag stranici, korišćen je postMessage() metod da postavi poruku kada je pronađen prost broj.[1]

Podrška uredi

Ako pregledač podržava veb vorkere, Worker svojstvo će biti dostupno na globalnom objektu prozora.[4] Worker svojstvo će biti nedefinisano (undefined) ako pregledač ne podržava vorkere.

Sledeći primer koda proverava da li pregledač podržava veb vorkere:

function browserSupportsWebWorkers() {
  return typeof window.Worker === "function";
}

Veb vorkeri su trenutno podržani od strane Safarija, Gugl Hroma, Opere, Internet Eksplorera (verzija 10) i Mozila Fajefoksa.[3][5] Mobilna verzija Safarija za iOS podržava veb vorkere još od verzije iOS 5. Android pregledač je prvo podržavao veb vorkere u verziji Android 2.1, ali je podrška uklonjena u verzijama Androida od 2.2 do 4.3 pre nego što je vraćena u verziji Android 4.4.[6][7]

Vidi još uredi

Reference uredi

  1. ^ a b v g d đ Web Workers, WHATWG, Arhivirano iz originala 22. 07. 2010. g., Pristupljeno 3. 6. 2010 
  2. ^ HTML Standard
  3. ^ a b "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. ^ „Arhivirana kopija”. Arhivirano iz originala 19. 10. 2013. g. Pristupljeno 22. 05. 2016. 
  7. ^ Can I use... Support tables for HTML5, CSS3, etc

Spoljašnje veze uredi

Specifikacije
Pregledač