Web Workers

Napsal Denik-vyvojare.bloger.cz (») 4. 1. 2011 v kategorii JavaScript, přečteno: 2310×

JavaScript dříve neumožňoval psaní vícevláknových aplikací na rozdíl od většiny moderních programovacích jazyků. Nabízel sice asynchronní práci jako např. s použitím XMLHttpRequest objektu, dále metodu setTimeout(), události atd. ale to neznamená automaticky vícevláknovost.  Web workers umožňují, aby se JavaScript v určitých situacích s jistými omezeními (základním omezením je, že web worker nemůže přistupovat na DOM) choval jako vícevláknový. Je tak například možné načíst JavaScriptový soubor, který se samostatně vykoná na pozadí, aniž by se blokovalo uživatelské rozhraní při jeho běhu.

Implementace záleží na konkrétním prohlížeči. Pokud je každý web worker implementován samostatným vláknem, mohou být efektivně využívány vícejaderné procesory, což je trend, na který se klade v poslední době velký důraz. Takové řešení nám pak umožňuje předejít blokování stránky dlouho probíhajícím skriptem a nepříjemným hláškám o příliš dlouho vykonávaném skriptu.

Pokud jde o podporu v jednotlivých prohlížečích, je celkem slušná s vyjímkou Internet Exploreru. Bohužel zatím to vypadá, že nebude podpora ani v IE9, což by mělo dost katastrofální dopad na použitelnost v dohledné budoucnosti. Pokud jde o ostatní prohlížeče, Opera podporuje web workers od verze 10.6, Safari od verze 4, Firefox od verze 3.5 a Chrome od verze 3. Problém podpory můžeme řešit testem jako je například tento :

if (typeof(Worker) !== "undefined") ...

Pokud prohlížeč podporu nenabízí, můžeme například vykonat alternativní kód.

Z hlediska přístupu ke sdíleným zdrojům jsou web workers relativně velmi bezpečné. Není možný přístup k DOM, ani ke společným komponentám neuzpůsobeným pro vícevláknový přístup. Mezi vlákny jsou definovány bezpečné komunikační body, takže by problémy se synchronizací neměly příliš nastávat.

Použití:

Každý web worker má .js soubor s kódem, který má vykonat. ( pomocí  importScripts můžeme do daného workeru nahrát postupně i více skriptů )  V kódu stránky nasloucháme jeho chybovým událostem a zprávám. Stejně tak ze stránky můžeme poslat zprávu pro web worker.

Jeden triviální příklad :

Kód pro stránku:

worker = new Worker("wwkod.js");

worker.postMessage("worker 1");

worker.onmessage = function (e) {  alert(e.data);};

Kód wwkod.js :

onmessage = function (e) { postMessage("postmessage data : " + e.data );};

Po načtení stránky se nám zobrazí

Web-worker-message


Odkazy :

http://www.whatwg.org/specs/web-workers/current-work/

Hodnocení:     nejlepší   1 2 3 4 5   odpad
Facebook MySpace Google Twitter Topčlánky.cz Linkuj.cz Jagg.cz Vybrali.sme.sk Del.icio.us

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel pět a devět