Cloudflare, Mozilla a Facebook vyvíjajú BinaryAST na urýchlenie načítania JavaScriptu

Inžinieri zo spoločností Cloudflare, Mozilla, Facebook a Bloomberg navrhlo nový formát BinaryAST na urýchlenie dodávky a spracovania JavaScript kódu pri otvorení webových stránok v prehliadači. BinaryAST presúva fázu syntaktickej analýzy na server a dodáva už vytvorené abstraktné syntaktické stromy (AST). Keď prehliadač prijme BinaryAST, môže okamžite prejsť na fázu kompilácie a obísť analýzu zdrojového kódu JavaScriptu.

Na testovanie pripravená referenčná implementácia poskytovaná pod licenciou MIT. Na analýzu sa používajú komponenty Node.js a kód na optimalizáciu a tvorbu AST je napísaný v jazyku Rust. Na strane prehliadačov je podpora
BinaryAST už dostupná v nočných zostaveniach Firefox. Kódovač v BinaryAST môže byť použitý ako na úrovni nástrojov konečných webov, tak aj na balenie skriptov externých webov na strane proxy alebo siete dodania obsahu. V súčasnosti už začal proces štandardizácie BinaryAST pracovnou skupinou ECMA TC39, po jej dokončení bude formát schopný koexistovať s existujúcimi metódami kompresie dodávaného obsahu, ako sú gzip a brotli.

Cloudflare, Mozilla a Facebook vyvíjajú BinaryAST na urýchlenie načítania JavaScriptu

Cloudflare, Mozilla a Facebook vyvíjajú BinaryAST na urýchlenie načítania JavaScriptu

Významná časť času pri spracovaní JavaScriptu je venovaná fáze načítania a syntaktickej analýzy kódu. S ohľadom na to, že objem sťahovaného JavaScriptu na mnohých populárnych stránkach sa blíži k 10 MB (napríklad LinkedIn — 7,2 MB, Facebook — 7,1 MB, Gmail — 3,9 MB), primárne spracovanie JavaScriptu spôsobuje značné oneskorenie. Fáza analýzy na strane prehliadača sa tiež spomaľuje v dôsledku nemožnosti plného zostavenia AST naživo, počas načítania kódu (prehliadač musí čakať na dokončenie načítania blokov kódu, napríklad konca funkcií, aby získal chýbajúce informácie potrebné na analýzu aktuálnych prvkov).

Čiastočne sa problém snažia riešiť prostredníctvom šírenia kódu v minimalizovanej a komprimovanej forme, ako aj pomocou cachovania prehliadačom vygenerovaného bajtkódu. Na moderných stránkach sa kód aktualizuje dosť často, a preto cachovanie len čiastočne rieši problém. Možným riešením by mohol byť WebAssembly, ale vyžaduje explicitné typovanie v kóde a zle sa hodí na urýchlenie spracovania už existujúceho kódu na JavaScripte.

Iným variantom je dodávka hotového skompilovaného bajtkódu namiesto JavaScript skriptov, ale vývojári prehľadávačov s tým nesúhlasia, pretože vonkajší bajtkód je ťažko overiteľný, jeho priamé spracovanie môže viesť k segmentácii Webu, vznikajú dodatočné hrozby bezpečnosti a vyžaduje sa vývoj formátu univerzálneho bajtkódu.

BinaryAST sa integruje do súčasného modelu vývoja a dodávky kódu bez vytvárania nového bajtkódu a bez zmien v jazyku JavaScript. Veľkosť dát vo formáte BinaryAST je porovnateľná so stlačeným minifikovaným JavaScript kódom a rýchlosť spracovania sa výrazne zvyšuje vylúčením fázy analýzy zdrojových textov. Navyše formát umožňuje kompiláciu do bajtkódu počas načítania BinaryAST, bez čakania na ukončenie prijatia všetkých dát. Analýza na strane servera tiež umožňuje vylúčiť z výstupnej reprezentácie BinaryAST nepoužívané funkcie a zbytočný kód, na ktorý sa pri analýze na strane prehľadávača míňa čas ako na rozbor, tak na prenos zbytočného trafficu.

Zaujímavosťou BinaryAST je aj možnosť obnoviť čitateľný JavaScript, ktorý nie je presne identický s pôvodným variantom, ale je semanticky ekvivalentný a zahŕňa tie isté názvy premenných a funkcií (BinaryAST uchováva názvy, ale neuchováva informácie o pozíciách v kóde, formátovaní a komentároch). Na druhej strane to prináša nové vektory útokov, no podľa názoru vývojárov sú tieto hrozby značne menšie a lepšie kontrolovateľné ako pri alternatívach, ako je šírenie bajtkódu.

Testy kódu facebook.com ukázali, že na analýzu JavaScriptu sa míňa 10-15% výkonu CPU a analýza trvá dlhšie ako generovanie bajtkódu a počiatočné vytváranie kódu pre JIT. V engine SpiderMonkey trvá úplná konštrukcia AST 500-800 ms a aplikácia BinaryAST umožnila tento čas skrátiť o 70-90%.
Celkovo pre väčšinu webových frameworkov pri aplikácii BinaryAST čas analýzy JavaScriptu klesá o 3-10% v režime bez optimalizácie a o 90-97% pri zapnutí režimu ignorovania nepoužívaných funkcií.
Pri vykonávaní testovacieho JavaScriptového balíka s veľkosťou 1,2 MB, použitie BinaryAST umožnilo skrátiť čas spustenia z 338 na 314 ms na desktopovom systéme (Intel i7) a z 2019 na 1455 ms na mobilnom zariadení (HTC One M8).

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster