Inženýři z Cloudflare, Mozilla, Facebook a Bloomberg
Pro testování
BinaryAST je již k dispozici v
Při zpracování JavaScriptu se značné množství času stráví ve fázi načítání a analýzy kódu. Vzhledem k tomu, že objem staženého JavaScriptu na mnoha populárních stránkách se blíží 10 MB (například pro LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), přináší počáteční zpracování JavaScriptu značné zpoždění. Fáze analýzy na straně prohlížeče je také zpomalena kvůli nemožnosti plně sestavit AST za běhu při načítání kódu (prohlížeč musí čekat na dokončení načítání bloků kódu, jako je konec funkcí, aby získal informace chybí k analýze aktuálních prvků).
Problém se snaží částečně vyřešit distribucí kódu v minimalizované a komprimované podobě a také ukládáním vygenerovaného bajtkódu do mezipaměti prohlížečem. Na moderních webech se kód aktualizuje poměrně často, takže cachování řeší problém jen částečně. Řešením by mohlo být WebAssembly, ale vyžaduje explicitní zadání kódu a není příliš vhodné pro urychlení zpracování stávajícího kódu JavaScript.
Další možností je dodat hotový kompilovaný bajtový kód namísto skriptů JavaScript, ale vývojáři vyhledávačů jsou proti, protože bajtový kód třetích stran je obtížné ověřit, jeho přímé zpracování může vést ke stratifikaci webu, vznikají další bezpečnostní rizika a vývoj je vyžadován univerzální formát bajtového kódu.
BinaryAST vám umožňuje zapadnout do vašeho aktuálního modelu vývoje a poskytování kódu bez vytváření nového bajtkódu nebo změny jazyka JavaScript. Velikost dat ve formátu BinaryAST je srovnatelná s komprimovaným minimalizovaným JavaScriptovým kódem a rychlost zpracování se díky eliminaci fáze analýzy zdrojového textu znatelně zvyšuje. Kromě toho formát umožňuje kompilaci do bajtového kódu při načítání BinaryAST, bez čekání na dokončení všech dat. Kromě toho vám analýza na straně serveru umožňuje vyloučit nepoužívané funkce a nepotřebný kód z vrácené reprezentace BinaryAST, což při analýze na straně prohlížeče ztrácí čas jak analýzou, tak přenosem zbytečného provozu.
Funkce BinaryAST je také schopnost obnovit čitelný JavaScript, který není úplně stejný jako původní verze, ale je sémanticky ekvivalentní a obsahuje stejné názvy proměnných a funkcí (BinaryAST ukládá názvy, ale neukládá informace o pozicích v kód, formátování a komentáře). Druhou stranou mince je vznik nových útočných vektorů, které jsou ale podle vývojářů mnohem menší a lépe ovladatelné než při použití alternativ, jako je distribuce bytecode.
Testy kódu facebook.com ukázaly, že analýza JavaScriptu spotřebuje 10–15 % zdrojů CPU a analýza zabere více času než generování bajtového kódu a počáteční generování kódu pro JIT. V enginu SpiderMonkey trvá kompletní vytvoření AST 500-800 ms a použití BinaryAST snížilo toto číslo o 70-90%.
Obecně platí, že u většiny webových ohňostrojů se při použití BinaryAST zkrátí čas analýzy JavaScriptu o 3–10 % v režimu bez optimalizace a o 90–97 %, když je povolen režim ignorování nepoužívaných funkcí.
Při spuštění testovací sady JavaScript o velikosti 1.2 MB umožnilo použití BinaryAST zrychlit dobu spouštění z 338 na 314 ms na stolním systému (Intel i7) a z 2019 na 1455 8 ms na mobilním zařízení (HTC One MXNUMX).
Zdroj: opennet.ru