Inženirji iz Cloudflare, Mozilla, Facebook in Bloomberg
Za testiranje
BinaryAST je že na voljo v
Pri obdelavi JavaScripta se precej časa porabi za fazo nalaganja in razčlenjevanja kode. Glede na to, da je obseg prenesenega JavaScripta na številnih priljubljenih mestih blizu 10 MB (na primer za LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), začetna obdelava JavaScripta povzroči precejšnjo zamudo. Stopnja razčlenjevanja na strani brskalnika je upočasnjena tudi zaradi nezmožnosti popolne gradnje AST sproti, ko se koda nalaga (brskalnik mora počakati, da se bloki kode naložijo, kot je konec funkcij, da pridobi informacije, ki manjkajo za razčlenitev trenutnih elementov).
Težavo poskušajo delno rešiti z distribucijo kode v pomanjšani in stisnjeni obliki ter s predpomnjenjem generirane bajtne kode s strani brskalnika. Na sodobnih spletnih mestih se koda posodablja precej pogosto, zato predpomnjenje le delno reši težavo. WebAssembly bi lahko bil rešitev, vendar zahteva eksplicitno vnašanje kode in ni najbolj primeren za pospešitev obdelave obstoječe kode JavaScript.
Druga možnost je dostaviti že pripravljeno prevedeno bajtno kodo namesto skriptov JavaScript, vendar razvijalci brskalnikov temu nasprotujejo, ker je bajtno kodo tretjih oseb težko preveriti, njena neposredna obdelava pa lahko povzroči razslojevanje spleta, pojavijo se dodatna varnostna tveganja in razvoj potrebna je univerzalna oblika bajtne kode.
BinaryAST vam omogoča, da se prilagodite svojemu trenutnemu modelu razvoja in dostave kode, ne da bi ustvarili novo bajtno kodo ali spremenili jezik JavaScript. Velikost podatkov v formatu BinaryAST je primerljiva s stisnjeno pomanjšano JavaScript kodo, hitrost obdelave pa se z odpravo faze razčlenjevanja izvornega besedila opazno poveča. Poleg tega format omogoča prevajanje v bajtno kodo, ko se naloži BinaryAST, ne da bi čakali, da se vsi podatki dokončajo. Poleg tega vam razčlenjevanje na strani strežnika omogoča, da iz vrnjene predstavitve BinaryAST izključite neuporabljene funkcije in nepotrebno kodo, ki pri razčlenjevanju na strani brskalnika izgublja čas tako pri razčlenjevanju kot pri prenašanju nepotrebnega prometa.
Značilnost BinaryAST je tudi zmožnost obnovitve berljivega JavaScripta, ki ni popolnoma enak izvirni različici, je pa pomensko enakovreden in vključuje enaka imena spremenljivk in funkcij (BinaryAST shrani imena, ne shrani pa informacij o pozicijah v koda, oblikovanje in komentarji). Druga plat medalje je pojav novih vektorjev napadov, ki pa so po besedah razvijalcev veliko manjši in bolj obvladljivi kot pri uporabi alternativ, kot je distribucija bajtne kode.
Preizkusi kode facebook.com so pokazali, da razčlenjevanje JavaScripta porabi 10–15 % virov procesorja in da razčlenjevanje traja več časa kot generiranje bajtne kode in začetno generiranje kode za JIT. V motorju SpiderMonkey traja čas za popolno izdelavo AST 500–800 ms, uporaba BinaryAST pa je to številko zmanjšala za 70–90 %.
Na splošno se pri večini spletnih ognjemetov pri uporabi BinaryAST čas razčlenjevanja JavaScript skrajša za 3-10 % v načinu brez optimizacije in za 90-97 %, ko je omogočen način ignoriranja neuporabljenih funkcij.
Pri izvajanju 1.2 MB testnega nabora JavaScript je uporaba BinaryAST omogočila pospešitev zagonskega časa s 338 na 314 ms na namiznem sistemu (Intel i7) in z 2019 na 1455 ms na mobilni napravi (HTC One M8).
Vir: opennet.ru