Cloudflare, Mozilla na Facebook hutengeneza BinaryAST ili kuharakisha upakiaji wa JavaScript

Wahandisi kutoka Cloudflare, Mozilla, Facebook na Bloomberg alipendekeza muundo mpya binaryAST ili kuharakisha utoaji na usindikaji wa msimbo wa JavaScript wakati wa kufungua tovuti kwenye kivinjari. BinaryAST huhamisha awamu ya uchanganuzi kwa upande wa seva na kutoa mti wa kisintaksia ambao tayari umetolewa (AST) Baada ya kupokea BinaryAST, kivinjari kinaweza kuendelea mara moja hadi hatua ya mkusanyiko, kwa kupita kuchanganua msimbo wa chanzo cha JavaScript.

Kwa majaribio tayari utekelezaji wa marejeleo unaotolewa chini ya leseni ya MIT. Vipengee vya Node.js hutumika kuchanganua, na msimbo wa uboreshaji na kizazi cha AST umeandikwa kwa Rust. Usaidizi wa upande wa kivinjari
BinaryAST tayari inapatikana katika usiku hujenga Firefox. Kisimbaji katika BinaryAST kinaweza kutumika katika kiwango cha zana za tovuti ya mwisho na kwa upakiaji hati za tovuti za nje kwenye kando ya seva mbadala au mtandao wa uwasilishaji wa maudhui. Hivi sasa, mchakato wa kusawazisha BinaryAST na kikundi kazi tayari imeanza ECMA TC39, baada ya hapo umbizo litaweza kuambatana na mbinu zilizopo za kubana maudhui, kama vile gzip na brotli.

Cloudflare, Mozilla na Facebook hutengeneza BinaryAST ili kuharakisha upakiaji wa JavaScript

Cloudflare, Mozilla na Facebook hutengeneza BinaryAST ili kuharakisha upakiaji wa JavaScript

Wakati wa kuchakata JavaScript, kiasi kikubwa cha muda hutumiwa katika awamu ya upakiaji na uchanganuzi wa msimbo. Kwa kuzingatia kwamba kiasi cha JavaScript iliyopakuliwa kwenye tovuti nyingi maarufu ni karibu na 10 MB (kwa mfano, kwa LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), usindikaji wa awali wa JavaScript huanzisha ucheleweshaji mkubwa. Hatua ya uchanganuzi kwenye upande wa kivinjari pia imepunguzwa kasi kwa sababu ya kutoweza kuunda kikamilifu AST kwenye nzi wakati msimbo unapakiwa (kivinjari kinapaswa kusubiri vizuizi vya msimbo ili kukamilisha upakiaji, kama vile mwisho wa kazi, kupata. habari inayokosekana ili kuchanganua vipengele vya sasa).

Wanajaribu kutatua tatizo kwa sehemu kwa kusambaza msimbo katika fomu iliyopunguzwa na iliyoshinikizwa, na pia kwa kuakibisha bytecode inayozalishwa na kivinjari. Kwenye tovuti za kisasa, msimbo unasasishwa mara nyingi, kwa hivyo caching hutatua tatizo kwa sehemu tu. WebAssembly inaweza kuwa suluhu, lakini inahitaji kuandika kwa uwazi katika msimbo na haifai vyema kwa ajili ya kuharakisha uchakataji wa msimbo uliopo wa JavaScript.

Chaguo jingine ni kutoa bytecode iliyoandaliwa tayari badala ya hati za JavaScript, lakini watengenezaji wa injini ya kivinjari wanapinga kwa sababu bytecode ya mtu wa tatu ni ngumu kudhibitisha, usindikaji wake wa moja kwa moja unaweza kusababisha utabaka wa Wavuti, hatari za ziada za usalama kutokea, na ukuzaji wa umbizo la bytecode zima linahitajika.

BinaryAST hukuruhusu kutoshea katika uundaji wa msimbo wako wa sasa na muundo wa uwasilishaji bila kuunda bytecode mpya au kubadilisha lugha ya JavaScript. Saizi ya data katika umbizo la BinaryAST inalinganishwa na msimbo wa JavaScript uliobanwa, na kasi ya kuchakata kwa kuondoa awamu ya uchanganuzi wa maandishi chanzo huongezeka sana. Kwa kuongeza, umbizo huruhusu ujumuishaji wa bytecode kwani BinaryAST inapakiwa, bila kungoja data yote ikamilike. Kwa kuongezea, kuchanganua kwenye upande wa seva hukuruhusu kuwatenga kazi ambazo hazijatumiwa na nambari isiyo ya lazima kutoka kwa uwakilishi uliorejeshwa wa BinaryAST, ambayo, wakati wa kuchanganua kwenye upande wa kivinjari, hupoteza wakati wa kuchanganua na kusambaza trafiki isiyo ya lazima.

Kipengele cha BinaryAST pia ni uwezo wa kurejesha JavaScript inayoweza kusomeka ambayo si sawa kabisa na toleo la awali, lakini ni sawa kisemantiki na inajumuisha majina yale yale ya vigezo na kazi (BinaryAST huhifadhi majina, lakini haihifadhi taarifa kuhusu nafasi katika kanuni, umbizo na maoni). Upande mwingine wa sarafu ni kuibuka kwa vekta mpya za kushambulia, lakini kulingana na wasanidi programu, ni ndogo sana na zinaweza kudhibitiwa kuliko wakati wa kutumia njia mbadala, kama vile usambazaji wa bytecode.

Majaribio ya msimbo wa facebook.com yalionyesha kuwa uchanganuzi wa JavaScript hutumia 10-15% ya rasilimali za CPU na uchanganuzi huchukua muda zaidi kuliko kuzalisha bytecode na kutengeneza msimbo wa awali wa JIT. Katika injini ya SpiderMonkey, wakati wa kujenga kabisa AST inachukua 500-800 ms, na matumizi ya BinaryAST imepunguza takwimu hii kwa 70-90%.
Kwa ujumla, kwa fataki nyingi za wavuti, wakati wa kutumia BinaryAST, wakati wa kuchanganua JavaScript hupunguzwa kwa 3-10% katika hali bila uboreshaji na kwa 90-97% wakati hali ya kupuuza kazi zisizotumiwa imewezeshwa.
Wakati wa kuendesha seti ya jaribio la JavaScript ya MB 1.2, kwa kutumia BinaryAST iliruhusu muda wa kuanza kuharakisha kutoka 338 hadi 314 ms kwenye mfumo wa kompyuta ya mezani (Intel i7) na kutoka 2019 hadi 1455 ms kwenye simu ya mkononi (HTC One M8).

Chanzo: opennet.ru

Kuongeza maoni