Többszálúság a böngészőben, avagy merjünk-e Javascriptben programot írni? Farkas Máté Budapest.js meetup
A Javascript nem erre való!
A Javascript ütemező működése
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
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
Forráskódok, források • HTML 5 Web Workers workers/current-work/ workers/current-work/ • Mozilla MDC • _More_Powerful_JavaScript_World/ _More_Powerful_JavaScript_World/ • • Forráskódok: • objectWorker és emulatedWorker: