Cloudflare, Mozilla eta Facebook-ek BinaryAST garatzen dute JavaScript kargatzea bizkortzeko

Cloudflare, Mozilla, Facebook eta Bloomberg-eko ingeniariak proposatu formatu berria binaryAST nabigatzailean guneak irekitzean JavaScript kodea bidaltzea eta prozesatzea bizkortzeko. BinaryAST-ek analisi-fasea zerbitzariaren aldean mugitzen du eta dagoeneko sortutako sintaxi-zuhaitz abstraktua hornitzen du (AST). BinaryAST bat jasotzean, arakatzaileak berehala joan daiteke konpilazio fasera, JavaScript iturburu-kodea analizatu gabe.

Probak egiteko prestatuta MIT lizentziapean emandako erreferentziazko ezarpena. Node.js osagaiak analizatzeko erabiltzen dira, eta optimizaziorako eta AST sortzeko kodea Rust-en idatzita dago. Arakatzailearen aldeko laguntza
BinaryAST dagoeneko eskuragarri dago gaueko batzarra Firefox. BinaryAST-en kodetzailea azken guneko tresneriaren mailan eta proxy edo edukia bidaltzeko sare baten alboko kanpoko guneetako script-ak biltzeko erabil daiteke. Gaur egun, lantaldearen BinaryAST estandarizazio prozesua hasi da dagoeneko ECMA TC39, ondoren formatua lehendik dauden edukia konprimitzeko metodoekin batera bizi ahal izango du, hala nola gzip eta brotli.

Cloudflare, Mozilla eta Facebook-ek BinaryAST garatzen dute JavaScript kargatzea bizkortzeko

Cloudflare, Mozilla eta Facebook-ek BinaryAST garatzen dute JavaScript kargatzea bizkortzeko

JavaScript prozesatzen denean, denbora kopuru handia ematen da kodea kargatu eta analizatzeko fasean. Webgune ezagun askotan deskargatutako JavaScripten bolumena 10 MBtik gertu dagoela kontuan hartuta (adibidez, LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), JavaScript-en hasierako prozesamenduak atzerapen handia dakar. Arakatzailearen aldean analisi-fasea ere moteldu egiten da AST guztiz eraiki ezin delako kodea kargatzen den heinean (arakatzaileak kode-blokeak kargatu arte itxaron behar du, funtzioen amaiera adibidez, lortzeko. uneko elementuak analizatzeko falta den informazioa).

Arazoa partzialki konpontzen saiatzen ari dira kodea txikiagotu eta konprimitu batean banatuz, baita arakatzaileak sortutako bytecodea cachean gordeta ere. Gune modernoetan, kodea sarritan eguneratzen da, beraz, cachean gordetzeak arazoa partzialki konpontzen du. WebAssembly irtenbide bat izan liteke, baina kodea esplizituki idaztea eskatzen du eta ez da egokia lehendik dagoen JavaScript kodea prozesatzea bizkortzeko.

Beste aukera bat da JavaScript script-en ordez konpilatutako bytecode prest egotea, baina arakatzaile-motorren garatzaileak aurka daude hirugarrenen bytecode egiaztatzea zaila delako, bere prozesamendu zuzenak Web estratifikazioa ekar dezakeelako, segurtasun-arrisku gehigarriak sortzen direlako eta garapena. bytecode formatu unibertsala behar da.

BinaryAST-k zure egungo kodearen garapen eta entrega ereduan sartzeko aukera ematen dizu, bytecode berririk sortu edo JavaScript hizkuntza aldatu gabe. BinaryAST formatuan datuen tamaina konprimitutako JavaScript kodearen parekoa da, eta prozesatzeko abiadura iturburuko testua analizatzeko fasea ezabatuz nabarmen handitzen da. Gainera, formatuak BinaryAST kargatzen den heinean bytecode konpilatzea ahalbidetzen du, datu guztiak osatzeko itxaron gabe. Horrez gain, zerbitzariaren aldean analizatzeak aukera ematen du itzultzen den BinaryAST irudikapenetik erabili gabeko funtzioak eta beharrezkoa ez den kodea baztertzea, eta horrek, arakatzailearen aldean analizatzean, denbora galtzen du alferrikako trafikoa analizatzen eta transmititzen.

BinaryAST-en ezaugarri bat jatorrizko bertsioaren berdina ez den JavaScript irakurgarria berreskuratzeko gaitasuna ere bada, baina semantikoki baliokidea dena eta aldagaien eta funtzioen izen berberak biltzen dituena (BinaryAST-ek izenak gordetzen ditu, baina ez du posizioei buruzko informazioa gordetzen kodea, formatua eta iruzkinak). Txanponaren beste aldea eraso-bektore berrien agerpena da, baina garatzaileen arabera, alternatibak erabiltzean baino askoz txikiagoak eta kontrolagarriagoak dira, hala nola bytecode banaketa.

Facebook.com kodearen probek erakutsi zuten JavaScript analizatzeak CPU baliabideen % 10-15 kontsumitzen duela eta analizatzeak JIT-rako bytecode eta hasierako kodea sortzeak baino denbora gehiago behar duela. SpiderMonkey motorrean, AST bat guztiz eraikitzeko denbora 500-800 ms behar da, eta BinaryAST erabiltzeak zifra hori % 70-90 murriztu du.
Orokorrean, web-su artifizial gehienetarako, BinaryAST erabiltzean, JavaScript analizatzeko denbora % 3-10 murrizten da optimizaziorik gabeko moduan eta % 90-97 erabiltzen ez diren funtzioak alde batera uzteko modua gaituta dagoenean.
1.2 MBko JavaScript proba multzoa exekutatzen denean, BinaryAST erabiliz abiarazte-denbora 338-tik 314 ms-ra bizkortu zen mahaigaineko sistema batean (Intel i7) eta 2019-tik 1455 ms-ra gailu mugikor batean (HTC One M8).

Iturria: opennet.ru

Gehitu iruzkin berria