Ang Cloudflare, Mozilla ug Facebook nagpalambo sa BinaryAST aron mapadali ang pag-load sa JavaScript

Mga inhenyero gikan sa Cloudflare, Mozilla, Facebook ug Bloomberg gisugyot bag-ong format BinaryASTAST aron mapadali ang paghatud ug pagproseso sa JavaScript code sa pag-abli sa mga site sa browser. Gipalihok sa BinaryAST ang yugto sa pag-parse ngadto sa kilid sa server ug nagsuplay sa usa ka namugna na nga abstract syntax tree (AST). Sa pagdawat sa usa ka BinaryAST, ang browser mahimo dayon nga magpadayon sa yugto sa pag-compile, nga dili ma-parse ang source code sa JavaScript.

Alang sa pagsulay giandam pagpatuman sa reference nga gihatag ubos sa lisensya sa MIT. Ang mga sangkap sa Node.js gigamit alang sa pag-parse, ug ang code alang sa pag-optimize ug henerasyon sa AST gisulat sa Rust. Suporta sa kilid sa browser
Ang BinaryAST anaa na sa gabii nga asembliya Firefox. Ang encoder sa BinaryAST mahimong magamit pareho sa end site tooling level ug para sa packaging scripts sa external sites sa kilid sa proxy o content delivery network. Sa pagkakaron, ang proseso sa standardisasyon sa BinaryAST sa working group nagsugod na ECMA TC39, nga human niana ang format mahimo nga mag-uban sa kasamtangan nga mga pamaagi sa pag-compress sa sulod, sama sa gzip ug brotli.

Ang Cloudflare, Mozilla ug Facebook nagpalambo sa BinaryAST aron mapadali ang pag-load sa JavaScript

Ang Cloudflare, Mozilla ug Facebook nagpalambo sa BinaryAST aron mapadali ang pag-load sa JavaScript

Kung giproseso ang JavaScript, daghang oras ang gigugol sa yugto sa pagkarga ug pag-parse sa code. Gikonsiderar nga ang gidaghanon sa na-download nga JavaScript sa daghang mga sikat nga site hapit sa 10 MB (pananglitan, alang sa LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), ang una nga pagproseso sa JavaScript nagpaila usa ka hinungdanon nga paglangan. Ang yugto sa pag-parse sa kilid sa browser gipahinay usab tungod sa kawalay katakus nga hingpit nga matukod ang AST sa langaw samtang ang code gikarga (ang browser kinahanglan maghulat alang sa mga bloke sa code aron makompleto ang pagkarga, sama sa katapusan sa mga gimbuhaton, aron makuha ang impormasyon nga kulang sa pag-parse sa kasamtangan nga mga elemento).

Gipaningkamutan nila nga masulbad ang problema pinaagi sa pag-apod-apod sa code sa usa ka gamay ug gi-compress nga porma, ingon man pinaagi sa pag-cache sa nahimo nga bytecode sa browser. Sa modernong mga site, ang code kanunay nga gi-update, mao nga ang pag-cache usa ka bahin nga makasulbad sa problema. Mahimong solusyon ang WebAssembly, apan nanginahanglan kini og klaro nga pag-type sa code ug dili angay alang sa pagpadali sa pagproseso sa kasamtangan nga JavaScript code.

Ang laing kapilian mao ang paghatud sa andam nga gihimo nga gihugpong nga bytecode imbes nga mga script sa JavaScript, apan ang mga nag-develop sa browser engine supak niini tungod kay ang ikatulo nga partido nga bytecode lisud nga mapamatud-an, ang direkta nga pagproseso niini mahimong mosangput sa stratification sa Web, dugang nga mga peligro sa seguridad ang motungha, ug ang pagpalambo sa gikinahanglan ang universal bytecode format.

Gitugotan ka sa BinaryAST nga mohaum sa imong karon nga pag-uswag sa code ug modelo sa pagpadala nga wala maghimo bag-ong bytecode o pagbag-o sa lengguwahe sa JavaScript. Ang gidak-on sa datos sa BinaryAST nga pormat ikatandi sa compressed minified JavaScript code, ug ang katulin sa pagproseso pinaagi sa pagwagtang sa source text parsing phase modako pag-ayo. Dugang pa, ang format nagtugot sa pag-compile sa bytecode samtang ang BinaryAST gikarga, nga wala maghulat nga makompleto ang tanan nga datos. Dugang pa, ang pag-parse sa kilid sa server nagtugot kanimo nga dili iapil ang wala magamit nga mga gimbuhaton ug wala kinahanglana nga code gikan sa gibalik nga representasyon sa BinaryAST, nga, kung nag-parse sa kilid sa browser, nag-usik sa oras sa pag-parse ug pagpasa sa wala kinahanglana nga trapiko.

Ang usa ka bahin sa BinaryAST mao usab ang abilidad sa pagpasig-uli sa mabasa nga JavaScript nga dili eksakto nga parehas sa orihinal nga bersyon, apan katumbas sa semantiko ug naglakip sa parehas nga mga ngalan sa mga variable ug mga gimbuhaton (Ang BinaryAST nagtipig sa mga ngalan, apan wala magtipig impormasyon bahin sa mga posisyon sa code, pag-format ug mga komento). Ang pikas nga bahin sa sensilyo mao ang pagtungha sa bag-ong mga vector sa pag-atake, apan sumala sa mga nag-develop, sila labi ka gamay ug mas kontrolado kaysa kung mogamit mga alternatibo, sama sa pag-apod-apod sa bytecode.

Ang mga pagsulay sa code sa facebook.com nagpakita nga ang pag-parse sa JavaScript nag-konsumo sa 10-15% sa mga kahinguhaan sa CPU ug ang pag-parse nagkinahanglag daghang oras kaysa paghimo og bytecode ug inisyal nga paghimo sa code alang sa JIT. Sa SpiderMonkey nga makina, ang panahon sa hingpit nga pagtukod sa usa ka AST nagkinahanglan og 500-800 ms, ug ang paggamit sa BinaryAST nakapakunhod niini nga numero sa 70-90%.
Sa kinatibuk-an, alang sa kadaghanan sa mga pabuto sa web, kung gigamit ang BinaryAST, ang oras sa pag-parse sa JavaScript makunhuran sa 3-10% sa mode nga wala’y pag-optimize ug sa 90-97% kung ang mode sa pagbaliwala sa wala magamit nga mga gimbuhaton gipagana.
Kung nagdagan sa usa ka 1.2 MB JavaScript test suite, ang paggamit sa BinaryAST nagtugot sa oras sa pagsugod sa pagpadali gikan sa 338 hangtod 314 ms sa usa ka desktop system (Intel i7) ug gikan sa 2019 hangtod 1455 ms sa usa ka mobile device (HTC One M8).

Source: opennet.ru

Idugang sa usa ka comment