Cloudflare, Mozilla thiab Facebook tsim BinaryAST kom ceev JavaScript loading

Engineers los ntawm Cloudflare, Mozilla, Facebook thiab Bloomberg qhia hom ntawv tshiab binaryAST txhawm rau txhawm rau xa thiab ua tiav ntawm JavaScript code thaum qhib qhov chaw hauv browser. BinaryAST txav mus rau theem parsing mus rau sab server thiab muab cov ntoo uas twb tau tsim cov ntsiab lus tsis txaus ntseeg (AST). Thaum tau txais BinaryAST, qhov browser tuaj yeem ua tam sim ntawd mus rau theem muab tso ua ke, hla kev txheeb xyuas JavaScript qhov chaws.

Rau kev sim npaj Cov ntaub ntawv siv tau muab raws li daim ntawv tso cai MIT. Node.js Cheebtsam yog siv rau parsing, thiab cov cai rau optimization thiab AST tiam yog sau nyob rau hauv Rust. Browser-sab txhawb nqa
BinaryAST twb muaj nyob rau hauv hmo ntuj tsim Firefox. Tus encoder hauv BinaryAST tuaj yeem siv tau ob qho tib si ntawm qhov kawg ntawm qhov cuab yeej cuab tam thiab rau ntim cov ntawv sau ntawm cov chaw sab nraud ntawm sab ntawm lub npe lossis cov ntsiab lus xa tawm. Tam sim no, cov txheej txheem ntawm kev tsim qauv ntawm BinaryAST los ntawm pawg neeg ua haujlwm tau pib lawm TIAB SA TC39, tom qab uas cov hom ntawv yuav tuaj yeem ua ke nrog cov ntsiab lus compression uas twb muaj lawm, xws li gzip thiab brotli.

Cloudflare, Mozilla thiab Facebook tsim BinaryAST kom ceev JavaScript loading

Cloudflare, Mozilla thiab Facebook tsim BinaryAST kom ceev JavaScript loading

Thaum ua tiav JavaScript, lub sij hawm tseem ceeb yog siv nyob rau hauv kev thauj khoom thiab parsing theem ntawm tus lej. Xav tias qhov ntim ntawm rub tawm JavaScript ntawm ntau qhov chaw nrov yog ze rau 10 MB (piv txwv li, rau LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), qhov pib ua ntawm JavaScript qhia txog kev ncua tseem ceeb. Cov theem parsing ntawm lub browser sab kuj tseem qeeb vim qhov tsis muaj peev xwm ua kom tiav AST ntawm ya raws li cov cai tau thauj khoom (qhov browser yuav tsum tau tos cov code blocks kom tiav kev thauj khoom, xws li qhov kawg ntawm kev ua haujlwm, kom tau txais cov ntaub ntawv uas ploj lawm los txheeb xyuas cov ntsiab lus tam sim no).

Lawv tab tom sim los daws qhov teeb meem ib nrab los ntawm kev faib cov cai hauv daim ntawv me me thiab compressed, nrog rau caching lub generated bytecode los ntawm browser. Ntawm cov chaw niaj hnub no, cov cai tau hloov kho ntau zaus, yog li caching tsuas yog ib feem daws qhov teeb meem. WebAssembly tuaj yeem yog qhov kev daws teeb meem, tab sis nws yuav tsum tau sau meej meej hauv cov lej thiab tsis haum rau kev ua kom nrawm ntawm kev ua tiav ntawm JavaScript code uas twb muaj lawm.

Lwm qhov kev xaiv yog xa cov ntaub ntawv npaj ua tiav los ntawm cov ntawv sau tsis yog JavaScript scripts, tab sis browser engine developers tawm tsam nws vim hais tias thib peb-tog bytecode yog ib qho nyuaj rau kev txheeb xyuas, nws ncaj qha ua yuav ua rau Web stratification, ntxiv kev ruaj ntseg txaus ntshai tshwm sim, thiab kev loj hlob ntawm. yuav tsum muaj ib tug universal bytecode hom ntawv.

BinaryAST tso cai rau koj kom haum rau hauv koj txoj cai tam sim no kev txhim kho thiab tus qauv xa khoom yam tsis tau tsim bytecode tshiab lossis hloov cov lus JavaScript. Qhov loj ntawm cov ntaub ntawv nyob rau hauv BinaryAST hom yog piv rau compressed minified JavaScript code, thiab kev ceev ceev los ntawm kev tshem tawm cov ntsiab lus parsing theem nce noticeably. Tsis tas li ntawd, hom ntawv tso cai muab tso ua ke rau bytecode li BinaryAST tau thauj khoom, tsis tas tos kom tag nrho cov ntaub ntawv kom tiav. Tsis tas li ntawd, parsing ntawm tus neeg rau zaub mov sab tso cai rau koj tshem tawm cov haujlwm tsis siv thiab cov lej tsis tsim nyog los ntawm tus sawv cev BinaryAST rov qab, uas, thaum parsing ntawm sab browser, nkim sijhawm ob qho tib si parsing thiab xa cov tsheb tsis tsim nyog.

Ib qho tshwj xeeb ntawm BinaryAST kuj yog lub peev xwm los rov qab nyeem tau JavaScript uas tsis zoo ib yam li tus thawj version, tab sis yog semantically sib npaug thiab suav nrog tib lub npe ntawm kev hloov pauv thiab kev ua haujlwm (BinaryAST txuag cov npe, tab sis tsis txuag cov ntaub ntawv hais txog txoj haujlwm hauv code, formatting thiab lus). Lwm sab ntawm lub npib yog qhov tshwm sim ntawm kev tawm tsam vectors tshiab, tab sis raws li cov neeg tsim khoom, lawv muaj tsawg dua thiab tswj tau ntau dua li thaum siv lwm txoj hauv kev, xws li kev faib tawm bytecode.

Kev ntsuam xyuas ntawm facebook.com code qhia tias kev txheeb xyuas JavaScript siv 10-15% ntawm CPU cov peev txheej thiab kev txheeb xyuas yuav siv sij hawm ntau dua li tsim cov bytecode thiab thawj tus lej cim rau JIT. Nyob rau hauv SpiderMonkey cav, lub sij hawm los ua kom tiav ib qho AST yuav siv sij hawm 500-800 ms, thiab kev siv BinaryAST tau txo cov duab no los ntawm 70-90%.
Feem ntau, rau feem ntau lub vev xaib foob pob hluav taws, thaum siv BinaryAST, JavaScript parsing lub sij hawm raug txo los ntawm 3-10% hauv hom tsis muaj kev ua kom zoo thiab los ntawm 90-97% thaum hom tsis quav ntsej cov haujlwm tsis siv.
Thaum khiav 1.2 MB JavaScript xeem teeb, siv BinaryAST tso cai rau lub sijhawm pib kom nrawm ntawm 338 txog 314 ms ntawm lub desktop (Intel i7) thiab los ntawm 2019 txog 1455 ms ntawm lub xov tooj ntawm tes (HTC One M8).

Tau qhov twg los: opennet.ru

Ntxiv ib saib