Endezyarên ji Cloudflare, Mozilla, Facebook û Bloomberg
Ji bo ceribandinê
BinaryAST jixwe tê de heye
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