sok mérnökök a Cloudflare-ból, a Mozillából, a Facebook-ból és a Bloombergből elkezdtek dolgozni egy új projekt „bináris AST" a JavaScript kód kézbesítésének és feldolgozásának felgyorsítása amikor webböngészőben nyit meg webhelyeket.
A BinaryAST az elemzési fázist a szerver oldalára viszi, és egy már létrehozott absztrakt szintaxisfát (AST) szállít. A BinaryAST kézhezvétele után a böngésző azonnal átmehet az összeállítás szakaszába, anélkül, hogy a JavaScript forráskódjának elemzését elvégezné.
A teszteléshez elkészült az MIT licencek alapján elkészített referencia megvalósítás. A Node.js összetevőket használják a kód elemzésére az AST optimalizálása és előállítása érdekében - írja a Rust.
A BinaryAST kódolója használható mind a véghely eszközkészlet szintjén, mind a külső webhely szkriptjeinek csomagolásához a proxy oldalon vagy a tartalomszolgáltató hálózaton.
jelenleg az ECMA TC39 munkacsoport már elindította a BinaryAST szabványosítási folyamatot, amely után a formátum együtt tud élni a szállított tartalom tömörítésének meglévő módszereivel, például a gzip és a brotli.
Ennyi javascript fájl befolyásolja a weboldalak betöltését
A JavaScript feldolgozása során jelentős idő telik el a kód betöltésének és elemzésének szakaszában.
Figyelembe véve azt a tényt, hogy a JavaScript mennyisége sok népszerű webhelyre betöltődött közel van a 10 MB-hoz (például a LinkedIn esetében - 7.2 MB, a Facebooknál - 7.1 MB, a Gmailnél - 3.9 MB), a folyamat JavaScript kezdőbetű jelentős késést vezet be.
A böngésző oldali elemzési szakasz is lelassul mivel nem lehet menet közben AST-t létrehozni, miközben a kód betöltődik (a böngészőnek meg kell várnia a kódblokkok betöltését, például a funkciók végét, hogy a hiányzó információkat megszerezhesse az aktuális elemek elemzéséhez).
Részben megpróbálják megoldani a problémát a kód minimalizált és tömörített formában történő terjesztésével, valamint a böngésző által generált gyorsítótárral.
Míg a modern webhelyeken a kód meglehetősen gyakran frissül, a gyorsítótárazás csak részben oldja meg a problémát.
A megoldás lehet a WebAssembly, de ehhez kifejezetten be kell írni a kódba és nem alkalmas a meglévő JavaScript-kód feldolgozásának felgyorsítására.
Egy másik lehetőség a kész fordított kód szállítása a JavaScript-szkriptek helyett, de a böngészőmotor-fejlesztők ellenzik azt, mivel a harmadik féltől származó kódot nehéz ellenőrizni, közvetlen feldolgozása elválaszthat a webtől., További biztonsági fenyegetések merülnek fel .
A BinaryAST a megoldás
A BinaryAST lehetővé teszi az integrációt a jelenlegi fejlesztési modellbe és a kód kézbesítése új bájtkód létrehozása nélkül és a JavaScript nyelvének megváltoztatása nélkül.
Az adatméret BinaryAST formátumban összehasonlítható a szűkített JavaScript kóddal és tömörítve van, és a forráselemzési szakasz kizárása miatt a feldolgozási sebesség figyelemre méltóan növekszik.
A formátum lehetővé teszi a fordítást byte-kódolásra, mint BinaryAST betöltéseket, anélkül, hogy megvárná az összes adat elkészülését.
A BinaryAST egyik jellemzője az olvasható JavaScript visszaállításának lehetősége is, nem egy az egyhez, amely megfelel az eredeti verziónak, de szemantikailag egyenértékű, és ugyanazokat a változó- és függvényneveket tartalmazza (a BinaryAST elmenti a neveket, de nem menti el a pozícióinformációkat a kódban, a formázásban és a megjegyzésekben).
Az érem másik oldala az új vektorok megjelenése a támadásokhoz, de a fejlesztők szerint ezek lényegesen kisebbek és jobban irányíthatók, mint alternatívák, például a bájtkód-terjesztés alkalmazásával.
A facebook kód tesztelése a CPU erőforrások 10-15% -át mutatta a JavaScript elemzésére költenek, és az elemzésük hosszabb ideig tart, mint a bytecode és a kezdeti kód létrehozása a JIT számára.
A támogatás A BinaryAST már elérhető a Firefox éjszakai verzióiban.
forrás: https://blog.cloudflare.com