Cloudflare, Mozilla ary Facebook dia mamolavola BinaryAST mba hanafainganana ny fandefasana JavaScript

Injeniera avy amin'ny Cloudflare, Mozilla, Facebook ary Bloomberg nanatitra endrika vaovao binaryAST mba hanafainganana ny fandefasana sy fanodinana ny code JavaScript rehefa manokatra tranokala amin'ny navigateur. BinaryAST dia mitondra ny dingana fanaparitahana amin'ny lafiny mpizara ary manome hazo syntax abstract efa miforona (AST). Rehefa mahazo ny BinaryAST, ny navigateur dia afaka mandeha avy hatrany amin'ny dingana fanangonana, mandingana ny fanaparitahana ny code source JavaScript.

Ho an'ny fitsapana vonona fampiharana reference nomena eo ambanin'ny lisansa MIT. Ho an'ny famafazana dia ampiasaina ny singa Node.js, ary soratana amin'ny Rust ny kaody ho an'ny fanatsarana sy famokarana AST. Fanohanana lafiny navigateur
BinaryAST dia efa misy amin'ny fivoriambe alina Firefox. Ny encoder ao amin'ny BinaryAST dia azo ampiasaina amin'ny haavon'ny fitaovana amin'ny tranokala farany, ary ho an'ny sora-baventy amin'ny tranokala ivelany amin'ny sisin'ny tambajotram-pandefasana proxy na votoaty. Amin'izao fotoana izao dia efa nanomboka ny dingan'ny fanamafisana ny BinaryAST ataon'ny vondrona miasa. ECMA TC39, aorian'izay ny endrika dia afaka miara-miaina amin'ny fomba efa misy amin'ny fanerena ny atiny nomena, toy ny gzip sy brotli.

Cloudflare, Mozilla ary Facebook dia mamolavola BinaryAST mba hanafainganana ny fandefasana JavaScript

Cloudflare, Mozilla ary Facebook dia mamolavola BinaryAST mba hanafainganana ny fandefasana JavaScript

Fotoana be dia be amin'ny fanodinana JavaScript no lanin'ny dingana famenoana sy fanaparitahana ny code. Raha jerena fa ny habetsaky ny JavaScript alaina amin'ny tranokala malaza maro dia manakaiky ny 10 MB (ohatra, ho an'ny LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), ny fanodinana voalohany ny JavaScript dia mampiditra fahatarana lehibe. Mihena ihany koa ny dingana fanaparitahana amin'ny lafiny navigateur noho ny tsy fahafahan'ny fananganana tanteraka ny AST amin'ny sidina rehefa feno ny kaody (ny navigateur dia tsy maintsy miandry ny blocs kaody hamita ny fandefasana, ohatra, ny fiafaran'ny asa, amin'ny mba hahazoana ny fampahalalana tsy hita mba handinihana ireo singa ankehitriny).

Amin'ny ampahany, manandrana mamaha ny olana izy ireo amin'ny alàlan'ny fizarana ny kaody amin'ny endrika faran'izay kely sy voatsindry, ary koa amin'ny alàlan'ny cache ny bytecode novokarin'ny navigateur. Amin'ny tranokala maoderina, ny kaody dia havaozina matetika, ka ny cache dia mamaha ny olana amin'ny ampahany ihany. Ny WebAssembly dia mety ho vahaolana, saingy mitaky ny fampiasana fanoratana mazava ao amin'ny kaody ary tsy mety amin'ny fanafainganana ny fanodinana ny code JavaScript efa misy.

Safidy iray hafa dia ny fandefasana bytecode efa natambatra ho solon'ny script JavaScript, fa ny mpamorona motera navigateur dia manohitra satria sarotra ny manamarina ny bytecode avy amin'ny antoko fahatelo, ny fanodinana mivantana azy dia mety hitarika amin'ny fametahana amin'ny Internet, mipoitra ny risika fiarovana fanampiny, ary ny fivoaran'ny tontolo iray. Ilaina ny format bytecode.

Ny BinaryAST dia ahafahanao miditra amin'ny famolavolana kaody ankehitriny sy modely fanaterana nefa tsy mamorona bytecode vaovao ary tsy manova ny fiteny JavaScript. Ny haben'ny angon-drakitra amin'ny endrika BinaryAST dia azo ampitahaina amin'ny kaody JavaScript nohamafisina, ary nitombo be ny hafainganam-pandehan'ny fanodinana noho ny fanilihana ny dingana fanaparitahana kaody loharano. Ankoatr'izay, ny format dia mamela ny fanangonana amin'ny bytecode rehefa fenoina ny BinaryAST, tsy miandry ny angon-drakitra rehetra ho raisina. Ho fanampin'izany, ny fanaparitahana eo amin'ny lafiny mpizara dia ahafahanao manilika ireo fiasa tsy ampiasaina sy kaody fanampiny avy amin'ny fanehoana BinaryAST naverina, izay, rehefa voasokajy amin'ny lafiny navigateur, dia mitaky fotoana handinihana sy handefasana fifamoivoizana fanampiny.

Ny endri-javatra iray amin'ny BinaryAST ihany koa dia ny fahafahana mamerina ny JavaScript azo vakina izay tsy mifanaraka amin'ny dikan-teny tany am-boalohany, fa mitovy amin'ny semantically ary ahitana ny anaran'ny variables sy ny asa mitovy (BinaryAST dia mamonjy anarana, fa tsy mitahiry fampahalalana momba ny toerana ao amin'ny code, formatting ary hevitra). Ny lafiny hafa amin'ny vola madinika dia ny fipoiran'ireo vectors fanafihana vaovao, saingy araka ny filazan'ny mpamorona, dia kely kokoa izy ireo ary azo fehezina kokoa noho ny safidy hafa toy ny fizarana bytecode.

Nasehon'ny andrana kaody Facebook.com fa ny 10-15% amin'ny loharanon'ny CPU no lany amin'ny fanaparitahana JavaScript ary mila fotoana bebe kokoa noho ny famokarana bytecode sy ny famoronana kaody voalohany ho an'ny JIT ny famakafakana. Ao amin'ny motera SpiderMonkey, ny fotoana hamitana ny fananganana AST dia mitaky 500-800 ms, ary ny fampiasana BinaryAST dia nampihena io tarehimarika io tamin'ny 70-90%.
Amin'ny ankapobeny, ho an'ny ankamaroan'ny afomanga amin'ny tranokala, rehefa mampiasa BinaryAST, dia mihena 3-10% ny fotoana famafazana JavaScript amin'ny fomba tsy misy fanatsarana ary amin'ny 90-97% rehefa alefa ny fomba tsy firaharahiana ireo fiasa tsy ampiasaina.
Rehefa manatanteraka suite fitsapana JavaScript 1.2 MB, ny fampiasana BinaryAST dia nanafaingana ny fotoana fanombohana manomboka amin'ny 338 ka hatramin'ny 314 ms amin'ny rafitra desktop (Intel i7) ary manomboka amin'ny 2019 ka hatramin'ny 1455 ms amin'ny fitaovana finday (HTC One M8).

Source: opennet.ru

Add a comment