Programování

Mozilla Firefox zvyšuje výkon JavaScriptu

Uživatelé prohlížeče Firefox mohou očekávat vylepšený výkon JavaScriptu v prohlížeči Firefox 83, přičemž je ve výchozím nastavení povolena aktualizace Warp na SpiderMonkey JavaScript engine.

Warp, také nazývaný WarpBuilder, zlepšuje odezvu a využití paměti a zrychluje načítání stránek prováděním změn v kompilátorech JiT (just-in-time). Optimalizace JiT se mění tak, aby se spoléhala pouze na jednoduchý lineární formát bytového kódu CacheIR, konkrétně na data CacheIR shromážděná základními úrovněmi. Nová architektura využívaná v prohlížeči je také popsána jako více udržovatelná a odemykající další vylepšení SpiderMonkey.

Firefox 83 byl vydán v beta verzi 20. října a jeho vydání je naplánováno na 17. listopadu. Ukázalo se, že warp je rychlejší než Ion, předchozí optimalizace JiT od SpiderMonkey, včetně 20% zlepšení doby načítání Dokumentů Google. Zlepšení vykázaly i další webové stránky náročné na JavaScript, jako jsou Netflix a Reddit.

Zakládání Warp na CacheIR umožnilo odstranění kódu z celého enginu, který byl potřebný ke sledování dat globálního typu odvození použitých IonBuilderem, což vedlo k urychlení. Ačkoli IonBuilder a WarpBuilder oba produkují Ion MIR, prostřední reprezentaci používanou optimalizací back-endu JiT, IonBuilder měl ve WarpBuilderu spoustu složitého kódu, který není potřeba. Warp také může dělat více práce mimo vlákno a vyžaduje méně rekompilací. Plány vyžadují pokračující optimalizaci Warpu, která je v současné době u některých syntetických testů pomalejší než Ion.

Warp nahradil frontend - fázi budování MIR - IonMonkey JiT. Plány vyžadují odstranění starého kódu a architektury, což se pravděpodobně stane ve Firefoxu 85. Ve výsledku se očekává další vylepšení výkonu a využití paměti. Mozilla také bude i nadále přírůstkově optimalizovat zadní část IonMonkey JiT, protože Mozilla věří, že stále existuje prostor pro zlepšení úloh náročných na JavaScript. Ve vývoji je také nástroj pro webové vývojáře a Mozillu k prozkoumání dat CacheIR pro funkci JavaScriptu.