Cloudflare, Mozilla, Facebook ja Bloomberg'i insenerid uut formaati , et kiirendada JavaScripti koodi edastamist ja töötlemist veebilehtede avamisel sirvijates. BinaryAST viib süntaktilise parsimise serverisse ja tarnib juba moodustatud abstraktse süntaksite puu (). Kui brauser saab BinaryAST, saab ta kohe minna kompileerimise faasi, mööda minnes JavaScripti lähtekoodi parsimisest.
Testimiseks Viidatud teostus, mida tarnitakse MIT litsentsi alusel. Parsimiseks kasutatakse Node.js komponente ning AST moodustamise ja optimeerimise kood on kirjutatud Rust keeles. Brauserite poolelt on tugi
BinaryAST juba saadaval Firefoxis. BinaryAST-i kodeerijat saab rakendada nii lõpp-otsingu tööriistade tasemel kui ka väliste veebisaitide skriptide pakendamisel proksi või sisu edastamise võrgus. Praegu on juba alustatud BinaryAST standardiseerimise protsessi töörühma , mille lõpetamisel saab formaat kooseksisteerida olemasolevate sisu tihendamise meetoditega, nagu gzip ja brotli.
JavaScript'i töötlemisel kulub märkimisväärne aeg koodi laadimise ja süntaksiparsingu faasile. Arvestades, et paljude populaarsete saitide JavaScript'i maht läheneb 10 MB-le (näiteks LinkedIn — 7,2 MB, Facebook — 7,1 MB, Gmail — 3,9 MB), põhjustab JavaScript'i esmane töötlemine olulisi viivitusi. Brauseri poolel toimuv parsimine aeglustub samuti, kuna puhta AST (Abstract Syntax Tree) koostamine on laadimise ajal võimatu (brauser peab ootama koodiblokkide, näiteks funktsioonide lõppemise lõpetamist, et saada puuduvat teavet tulevaste elementide parsimiseks).
Osaliselt proovivad probleemi lahendada koodi levitamisega minimeeritud ja tihendatud kujul, samuti brauserikandidaatide genereeritud baitkoodi vahemällu salvestamise abil. Kaasaegsetes saitides uuendatakse koodi piisavalt tihti, seega lahendab vahemällu salvestamine probleemi vaid osaliselt. Lahendus võiks olla WebAssembly, kuid see nõuab koodis selget tüpiseerimist ning ei sobi hästi juba olemasoleva JavaScript'i koodi töötlemise kiirendamiseks.
Teiseks võimaluseks on valmis kompileeritud baidikoodi kohaletoimetamine JavaScripti skriptide asemel, kuid brauseri mootorite arendajad on sellele vastu, kuna kolmanda osapoole baidikoodi on raske kinnitada, selle vahetu töötlemine võib viia veebieristumiseni, lisanduvad täiendavad turvaohtud ja on vajalik universaalse baidikoodi formaadi arendamine.
BinaryAST võimaldab integreeruda olemasolevasse koodiarenduse ja -toimetamise mudelisse ilma uue baidikoodi loomise ja JavaScripti keele muutmiseta. BinaryAST formaadis andmete suurus on võrreldav kokku surutud minimeeritud JavaScript-koodiga, samas kui töötlemise kiirus suurendab oluliselt tänu parsimisfaasi välistamisele. Lisaks võimaldab formaat kompileerida baidikoodi BinaryAST-i laadimise käigus, ootamata kõigi andmete saamise lõpetamist. Samuti võimaldab serveripoolne parsimine välistada BinaryAST-is kasutamata funktsioonid ja liigse koodi, millele brauseripoolse parsimise käigus kulutatakse aega nii analüüsimise kui ka liigse liikluse edastamise jaoks.
BinaryAST-i omadus on ka võimalus taastada loetav JavaScript, mis ei pruugi olla täpselt sama, mis algne versioon, kuid on semantiliselt ekvivalentne ning sisaldab samu muutuja- ja funktsiooni nimesid (BinaryAST säilitab nimed, kuid mitte koodi positsioonide, vorminduse ja kommentaaride teavet). Teisest küljest kutsub see esile uusi rünnakusuundi, kuid arendajate arvates on need oluliselt väiksemad ja kontrollitavamad kui alternatiivide kasutamisel, nagu näiteks bytecode'i levitamine.
Koodi testid facebook.com-is on näidanud, et JavaScripti parsimiseks kulub 10-15% CPU ressurssidest ja parsimine võtab rohkem aega kui bytecode'i genereerimine ja koodi esialgne koostamine JIT jaoks. SpiderMonkey mootoris kulub kogu AST loomisele 500-800 ms ning BinaryAST-i kasutamine on võimaldanud seda aega vähendada 70-90%.
Üldiselt on suurema osa veebiraamistikest BinaryAST-i kasutamisel JavaScripti parsimise aeg 3-10% vähem optimeerimisrežiimis ja 90-97% võrra, kui on sisse lülitatud mittetagasitevate funktsioonide ignoreerimise režiim.
Testi JavaScript komplekti, mille suurus on 1,2 MB, töötlemisel võimaldas BinaryAST käivitamisaja kiirus tõsta lauaarvutil (Intel i7) 338 ms-lt 314 ms-le ja mobiilseadmel (HTC One M8) 2019 ms-lt 1455 ms-le.
Allikas: opennet.ru
