Cloudflare, Mozilla û Facebook BinaryAST pêşve dibin da ku barkirina JavaScriptê bilezînin

Endezyarên ji Cloudflare, Mozilla, Facebook û Bloomberg pêşniyar kirin formata nû binaryAST ji bo bilezkirina radestkirin û hilanîna koda JavaScriptê dema vekirina malperan di gerokek de. BinaryAST qonaxa parskirinê digre ser milê serverê û dara hevoksaziya abstrakt a ku berê hatî çêkirin peyda dike (AST). Bi wergirtina BinaryAST re, gerok dikare tavilê biçe qonaxa berhevokê, ji parsandina koda çavkaniyê ya JavaScript dûr bixe.

Ji bo ceribandinê amade kirin pêkanîna referansê ku di bin lîsansa MIT-ê de hatî peyda kirin. Ji bo parskirinê, hêmanên Node.js têne bikar anîn, û koda ji bo xweşbînkirin û hilberîna AST bi Rust tê nivîsandin. Piştgiriya aliyê gerokê
BinaryAST jixwe tê de heye civîna şevê Firefox. Di BinaryAST de şîfreker dikare hem di asta amûrê ya malpera dawîn de, hem jî ji bo pakkirina skrîptên malperên derveyî yên li kêleka proxy an tora radestkirina naverokê were bikar anîn. Heya nuha, pêvajoya standardkirina BinaryAST ji hêla koma xebatê ve dest pê kiriye. ECMA TC39, piştî ku format dikare bi rêbazên heyî yên berhevkirina naveroka diyarkirî re, wek gzip û brotli, bi hev re bijî.

Cloudflare, Mozilla û Facebook BinaryAST pêşve dibin da ku barkirina JavaScriptê bilezînin

Cloudflare, Mozilla û Facebook BinaryAST pêşve dibin da ku barkirina JavaScriptê bilezînin

Di pêvajoya JavaScriptê de demek girîng ji qonaxa barkirin û parkirina kodê tê girtin. Bihesibînin ku mîqdara JavaScript-a ku li ser gelek malperên populer hatî dakêşandin nêzîkê 10 MB e (mînak, ji bo LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), pêvajoya destpêkê ya JavaScript derengiyek girîng destnîşan dike. Qonaxa parskirinê ya li aliyê gerokê jî hêdî dibe ji ber ne gengaziya avakirina AST-ê bi tevahî dema ku kod tê barkirin (gerok divê li bendê bimîne ku blokên kodê biqedînin, mînakî, dawiya fonksiyonan, di da ku hûn agahdariya winda bistînin da ku hêmanên heyî parve bikin).

Beşek, ew hewl didin ku pirsgirêkê bi belavkirina kodê bi rengek piçûktir û pêçandî, û her weha bi cachkirina bytecode-ya hatî çêkirin ji hêla gerokê ve çareser bikin. Li ser malperên nûjen, kod pir caran tê nûve kirin, ji ber vê yekê caching tenê bi qismî pirsgirêkê çareser dike. WebAssembly dibe ku çareserî be, lê ew pêdivî ye ku koda kodê ya eşkere bikar bîne û ji bo bilezkirina pêvajoyek koda JavaScript-ê ya heyî ne baş e.

Vebijarkek din ev e ku li şûna nivîsarên JavaScript-ê bitekoda berê-berhevkirî bişîne, lê pêşdebirên motora gerokê li dij in ji ber ku rastkirina bytekodê ya sêyemîn dijwar e, pêvajoyek rasterast dikare bibe sedema qatkirina Webê, xetereyên ewlehiyê yên din çêdibin, û pêşvebirina gerdûnek gerdûnî. format bytecode pêwîst e.

BinaryAST destûrê dide te ku bêyî afirandina bytecode-ya nû û bêyî ku zimanê JavaScript-ê biguhezîne, di modela pêşkeftin û radestkirina kodê ya heyî de cîh bigre. Mezinahiya daneya di forma BinaryAST de bi koda JavaScriptê ya piçûkkirî ya pêçandî re tête berhev kirin, û leza pêvajoyê ji ber dûrxistina qonaxa parkirina koda çavkaniyê bi berçav zêde dibe. Wekî din, format destûrê dide berhevkirinê ji bo bytecode dema ku BinaryAST tê barkirin, bêyî ku li benda wergirtina hemî daneyan bimîne. Digel vê yekê, parskirina li aliyê serverê dihêle hûn fonksiyonên nekarandî û koda zêde ji nûnertiya BinaryAST vegerî derxînin, ya ku, dema ku li aliyê gerokê were pars kirin, hem ji bo parkirin û hem jî ji bo veguheztina seyrûsefera zêde dem digire.

Taybetmendiyek BinaryAST di heman demê de şiyana vegerandina JavaScript-a xwendinê ye ku bi guhertoya orîjînal re nagunce, lê ji hêla semantîkî ve hevwate ye û heman navên guhêrbar û fonksiyonan vedihewîne (BinaryAST navan hilîne, lê agahdariya li ser pozîsyonên di kodê de hilnagire, format dike. û şîrove). Aliyê din ê drav derketina vektorên êrîşê yên nû ye, lê li gorî pêşdebiran, ew ji alternatîfên wekî dabeşkirina bytecode pir piçûktir û kontroltir in.

Testên kodê yên Facebook.com destnîşan kirin ku 10-15% ji çavkaniyên CPU li ser parkirina JavaScript-ê têne xerc kirin û parkirin ji hilberîna bytecode û hilberîna koda destpêkê ya ji bo JIT-ê bêtir dem digire. Di motora SpiderMonkey de, dema avakirina bi tevahî AST-ê 500-800 ms digire, û karanîna BinaryAST ev hejmar 70-90% kêm kir.
Bi gelemperî, ji bo piraniya fîşekên webê, dema ku BinaryAST bikar tînin, dema parkirina JavaScript-ê di moda bêyî xweşbîniyê de ji% 3-10% kêm dibe û dema ku moda paşguhkirina fonksiyonên nekarandî çalak e ji% 90-97 kêm dibe.
Dema ku komek ceribandinek JavaScript-a 1.2 MB-ê bicîh tîne, bi karanîna BinaryAST dema destpêkirina destpêkirinê ji 338 ber 314 ms li ser pergalek sermaseyê (Intel i7) û ji 2019-an heya 1455 ms li ser cîhazek mobîl (HTC One M8) bilez kir.

Source: opennet.ru

Add a comment