Szerző: Gálffy Csaba

2017. április 24. 16:29:00

Honnan jönnek a még gyorsabb böngészők?

A Microsoft Edge böngészője a Windows 10 operációs rendszerrel egyszerre frissül, így a Creators Update keretében ez a szoftver is új verziót kapott, ennek részeként pedig néhány új fejlesztéssel gazdagodott a Chakra JavaScript-motor is.

Szokás szerint az új Windows 10-alverzióval élesedik az Edge böngésző legfrissebb kiadása is - a két szoftvert azonos ciklusban adja ki a Microsoft. A cég fejlesztői most új blogbejegyzésben részletezték, hogy a böngésző részét képező Chakra JavaScript-motor milyen apróbb újdonságokat hoz.

Még 2012-ben kapta meg a Chakra a késleltetett parse-olás képességét, előbb a függvények, majd az eseménykezelők késleltetett feldolgozása érkezett meg a motorba. Ennek keretében a motor végez egy előfeldolgozást, amelyben kiszűri a szintaktikai hibákat, a teljes feldolgozást azonban elhalasztja egészen addig, amíg a függvényt nem hívja a program. Ez két szempontból is hasznos: egyrészt csökkenti az azonnal elvégzendő munka mennyiségét, így gyorsulhat például az oldalak betöltődése, másrészt csökkenti a memóriahasználatot, mivel a memóriaterület kiosztását is elhalasztja.

Most új fejlesztést jelent be a Chakra-csapat: a korábban már feldolgozott, lefordított függvények kidobását (a deferring mintájára ez a re-deferring nevet kapta). A felszínen ez végtelenül egyszerűen hangzik: a motor a már nem használt függvényeket az azokhoz tartozó memóriaterülettel együtt eldobja, így csökkenti a memóriahasználatot. A megoldás komplexitását az adja, hogy meg kell találni a finom egyensúlyt a túlságosan passzív takarítás és a túlságosan agresszív között: utóbbi esetben ugyanis a kidobott függvények újrafeldolgozásával, a bájtkód előállításával többet veszítünk a teljesítményből, mint amennyit nyernénk.

A Chakra ezért egy egyedi heurisztikát használ, amely rendszeresen, bizonyos számú GC (garbage collection) ciklusonként számolja a függvényhívások számát, a nem hívott függvényeket pedig kidobja. A heurisztika a ciklusok ideális számának megállapításában játszik szerepet, betöltődésnél például alacsonnyal dolgozik a motor, ilyenkor rengeteg függvény hívódik, ami később már nem.

ONLINE Scrum és gépi tanulás meetupjaink indulnak! Jelentkezik az ingyenes HWSW free!, immár online formátumban.

A fogásnak köszönhetően tartalomtípustól függően 6-12 százalékkal csökkenthető a memóriahasználat, ez pedig még csak a kezdet, a következő hónapokban a csapat igyekszik kiterjeszteni az eldobható függvények körét, így az arrow függvények, a getter-setter függvények és más elemek is profitálhatnak belőle.

Érdekes probléma a minifierek kezelése. Ezek olyan automatizált szűrők, amellyel a kézzel írt JavaScript kód minimálisra zsugoríthatóak, így a kliensoldalon a letöltés kisebb lesz. A minifier használata azonban néha szokatlan kódmintázatokat eredmények, amelyeket a fejlesztők normálisan nem használnak és így a Chakra sem optimalizált ezek kezelésére. Ez most változik, először az UglifyJS egyedi mintázataihoz készített optimalizált feldolgozást a Microsoft, ezzel helyenként 20-50 százalékos teljesítményjavulást sikerült elérni. Szintén optimalizációt kapott a Closure fordító által létrehozott JavaScript-mintázat is - ez 5-15 százalékkal gyorsabban fut most.

Az új Edge-ben jelenik meg (egyelőre kísérleti stádiumban) a WebAssembly támogatása is. A többi böngészőgyártóhoz hasonlóan a Microsoft is az MVP (minimum viable product) megközelítés mellett tette le a voksát, így az Edge-ben is elérhető az új webes bináris formátum támogatása, bekapcsolt fejlesztői mód mellett. A fejlesztés persze a jövőben is gőzerővel folyik, az Edge következő kiadásaival fokozatosan közelebb érhet az új technológia támogatása.

a címlapról