Többszálúság a böngészőben, avagy
merjünk-e Javascriptben programot írni?
Farkas MátéBudapest.js meetup 2010.04.14.
A Javascript nem erre való!
http://weblabor.hu//blogmarkok/104451#comment-67266
A legnagyobb hátrány:
• Amíg Javascriptben számítást végzünk, semmi más nem történhet a böngészőben• Kivétel jelenleg: Opera• És majd a Webkit 2 alapú
böngészők
A megoldás: Web Worker
• A Google Gears-féle WorkerPool szabványosítása, a HTML 5 része• A Worker egy teljesen különálló
folyamatként dolgozik, csak a létrehozójával tud kommunikálni, és vele is csak üzenet küldéssel
index.html
hello.js
Használati előnyök
• A böngésző „lefagyasztása nélkül” tudunk hosszabb számításokat végezni• Kihasználhatóak a több magos
processzorok• demo
Többszálú teljesítmény
http://www.yafla.com/dforbes/Web_Workers_and_You__A_Faster_More_Powerful_JavaScript_World/
Böngésző támogatás
• Chrome: minden worker új process• Safari: minden worker új szál• Firefox: nem string értékek
küldése/fogadása is lehet• Opera: nem támogatja• Internet Explorer: nem támogatja
PHP 5.2: 5,26 sec
A Javascript lassú.
Perl 5.10: 3,26 sec
Google Chrome 5: ??? sec
Google Chrome 5: 0,05 sec
Egy másik teszt
Böngésző támogatás 2
• A HTML 5 Worker nem kompatíbilis a Gears-féle WorkerPool-lal• Volt több próbálkozás szimulálni
ezt a viselkedést (jsworker, ie-web-worker), de egyik sem kielégítő
emulatedWorker.js
• Elég ezt betölteni, és a Worker API-t használó Javascript futni fog minden böngészőben…• … de ettől nem lesz többszálú…• … és komolyabb adatszerkezetek-
nél bonyolult az üzengetés
objectWorker.js
• Egy intuitív absztrakció a Workerek használatához• (Típusjelzéssel ellátott) objektumok
küldése/fogadása• Eljárás hívás
Az objectWorker használata
A worker.js
Bonyolult? – Nem, sőt!
Na és az Internet Explorer?
Összefoglalás
• Kis odafigyeléssel ma már írhatunk programot Javascriptben• Weboldalak esetén egyszerűen
küldhetjük háttérbe a számítási feladatokat• Worker-képes böngészővel teher-
mentesíthető a szerverünk
Köszönöm a figyelmet!
Farkas MátéBudapest.js meetup 2010.04.14.
Forráskódok, források• HTML 5 Web Workers
http://www.whatwg.org/specs/web-workers/current-work/• Mozilla MDC https://developer.mozilla.org/En/DOM/Worker
• http://www.yafla.com/dforbes/Web_Workers_and_You__A_Faster_More_Powerful_JavaScript_World/
• http://ejohn.org/blog/how-javascript-timers-work/
• Forráskódok: http://fmate14.try.hu/2010/bpjs-objectWorker/• objectWorker és emulatedWorker:
http://code.google.com/p/object-worker/