Mellékleteink: HUP | Gamekapocs
Keres

Külön szálat kap a Chrome JavaScript-fordítója

Gálffy Csaba, 2014. február 14. 14:46
Ez a cikk több évvel ezelőtt születetett, ezért előfordulhat, hogy a tartalma már elavult.
Frissebb anyagokat találhatsz a keresőnk segítségével:

A Chrome legújabb, egyelőre béta állapotú kiadása fontos újdonságot hoz a motorháztető alatt: a V8 JavaScript-motor immár külön szálon végzi a kód optimalizálását és végrehajtását, így a két feladat nem akasztja meg kölcsönösen egymást. Az eredmény: kevesebb fennakadással futó weboldalak.

A Chrome JavaScript-motorja, a V8 just-in-time (JIT) fordítót használ, vagyis a függvényekből csak közvetlenül első meghívásuk előtt készít gépi kódot, majd lefuttatja azt. Az első lépésben ezért egy gyors fordító dolgozik, amely viszonylag lassú gépi kódot generál a JavaScriptből, azt azonban villámgyorsan teszi. A következő lépcsőben a sűrűn használt függvények és kódrészletek további optimalizációt kapnak, ennek eredménye villámgyorsan végrehajtható alkalmazás lesz, az optimalizált újrafordítás azonban nagyon időigényes.

Jelenleg...

A problémát az okozza, hogy a V8 jelenlegi változata a JavaScript-motor fő szálán végzi a fordítást és a végrehajtást is. A gyakorlatban ez azt jelenti, hogy az optimalizáló fordítás idejére az alkalmazás futását felfüggeszti, ami a felhasználó számára jól érzékelhető fennakadást jelent a weboldal működésében. A Google által hozott példa az Octane benchmark Mandreel tesztje, ebben az optimalizáló fordítás akár 6 tizedmásodpeces akadást is összehozhat, míg a bonyolult programból hatékony gépi kód keletkezik.

Az új fejlesztésnek köszönhetően az optimalizáló fordítás külön, háttérben futó (alacsonyabb prioritású) programszálat kap, amely többmagos processzorokon akár külön magon is futhat. Az eredmény, hogy a két feladat immár futhat párhuzamosan, a JavaScript futása pedig sokkal folyamatosabbá válik ennek következtében. A fejlesztés a benchmarkokban is érezhető gyorsulást hoz, a már említett Mandreel tesztben például 27 százalékkal magasabb a mért teljesítmény azonos hardveren (Nexus 5).

...és hamarosan.

A képen egyébként látható, hogy a kódoptimalizáció és maga a futtatás szinte ugyanannyi számítási kapacitást emészt fel a futás első néhány másodpercében. Az első 4500 ezredmásodpercben az optimalizáló fordító az idő 40 százalékát emészti fel, a futtatásra (az egyéb feladatok miatt) pedig csak 48 százalék jut. A leválasztott fordítóval a futtatás részaránya 74 százalékra tud emelkedni, a fő szálon futó fordítás pedig 14,5 százalékra zsugorodik. Ennél is fontosabb azonban a felhasználó szempontjából, hogy a drámai, több, mint fél másodperces szünet teljesen eltűnik, a legnagyobb akadás hossza mintegy 100 ezredmásodpercre csökken.

A JavaScript sebessége az elmúlt években látványosat lépett előre, a különböző böngészőgyártók motorjai pedig újabb és újabb innovációkkal gyorsítják az alkalmazások futását. Ennek köszönhetően az asztali gépeken már a natív alkalmazásokhoz mérhető felhasználói élményt nyújtanak a webes alkalmazások. A mobileszközök szerény sebességű processzorai számára azonban a komplex webes alkalmazások ma is nagy terhet jelentenek, így a fejlesztések legújabb célpontját már a telefonokra és tabletekre történő optimalizáció jelenti.

Facebook

Mit gondolsz? Mondd el!

Adatvédelmi okokból az adott hír megosztása előtt mindig aktiválnod kell a gombot! Ezzel a megoldással harmadik fél nem tudja nyomon követni a tevékenységedet a HWSW-n, ez pedig közös érdekünk.