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
