Cloudflare, Mozilla ва Facebook BinaryAST-ро барои суръат бахшидан ба боркунии JavaScript таҳия мекунанд

Муҳандисони Cloudflare, Mozilla, Facebook ва Bloomberg пешниҳод карда шуд формати нав binaryAST барои суръат бахшидан ва коркарди коди JavaScript ҳангоми кушодани сайтҳо дар браузер. BinaryAST марҳилаи таҳлилро ба тарафи сервер интиқол медиҳад ва дарахти абстрактии синтаксиси аллакай тавлидшударо таъмин мекунад (AST). Пас аз гирифтани BinaryAST, браузер метавонад фавран ба марҳилаи тартибдиҳӣ гузаред ва аз таҳлили коди ибтидоии JavaScript гузаред.

Барои санҷиш тайёр карда шудааст татбиқи истинод, ки таҳти иҷозатномаи MIT дода шудааст. Ҷузъҳои Node.js барои таҳлил истифода мешаванд ва рамзи оптимизатсия ва тавлиди AST дар Rust навишта шудааст. Дастгирии браузер
BinaryAST аллакай дар дастрас аст мачлиси шабона Firefox. Рамзгузорро дар BinaryAST метавон ҳам дар сатҳи абзорҳои ниҳоии сайт ва ҳам барои бастабандии скриптҳои сайтҳои беруна дар канори прокси ё шабакаи интиқоли мундариҷа истифода бурд. Дар айни замон раванди стандартизатсияи BinaryAST аз ҷониби гурӯҳи корӣ аллакай оғоз шудааст ECMA TC39, ки пас аз он формат метавонад бо усулҳои мавҷудаи фишурдани мундариҷа, ба монанди gzip ва brotli ҳамзистӣ кунад.

Cloudflare, Mozilla ва Facebook BinaryAST-ро барои суръат бахшидан ба боркунии JavaScript таҳия мекунанд

Cloudflare, Mozilla ва Facebook BinaryAST-ро барои суръат бахшидан ба боркунии JavaScript таҳия мекунанд

Ҳангоми коркарди JavaScript миқдори зиёди вақт дар марҳилаи боркунӣ ва таҳлили код сарф мешавад. Бо назардошти он, ки ҳаҷми JavaScript-и зеркашидашуда дар бисёр сайтҳои машҳур ба 10 МБ наздик аст (масалан, барои LinkedIn – 7.2 МБ, Facebook – 7.1 МБ, Gmail – 3.9 МБ), коркарди ибтидоии JavaScript таъхири назаррасро ба вуҷуд меорад. Марҳилаи таҳлил дар паҳлӯи браузер инчунин аз сабаби имконнопазирии пурра сохтани AST дар парвоз, вақте ки рамз бор карда мешавад, суст мешавад (браузер бояд интизор шавад, ки блокҳои код барои ба итмом расонидани боркунӣ, ба монанди анҷоми функсияҳо, ба даст овардани маълумоте, ки барои таҳлили унсурҳои ҷорӣ мавҷуд нест).

Онҳо кӯшиш мекунанд, ки мушкилотро қисман тавассути паҳн кардани код дар шакли камшуда ва фишурдашуда ва инчунин бо кэшкунии байткоди тавлидшуда тавассути браузер ҳал кунанд. Дар сайтҳои муосир, код зуд-зуд нав карда мешавад, аз ин рӯ кэш танҳо қисман мушкилотро ҳал мекунад. WebAssembly метавонад як роҳи ҳал бошад, аммо он воридкунии дақиқи кодро талаб мекунад ва барои суръат бахшидан ба коркарди коди мавҷудаи JavaScript чандон мувофиқ нест.

Варианти дигар расонидани байткоди омодаи тартибдодашуда ба ҷои скриптҳои JavaScript мебошад, аммо таҳиягарони муҳаррики браузер зидди он ҳастанд, зеро тафтиши байткоди тарафи сеюм душвор аст, коркарди мустақими он метавонад ба табақабандии веб оварда расонад, хатарҳои иловагии амниятӣ ба вуҷуд меоянд ва рушди формати байткоди универсалӣ лозим аст.

BinaryAST ба шумо имкон медиҳад, ки бидуни эҷоди байткоди нав ё тағир додани забони JavaScript ба модели таҳия ва интиқоли коди кунунии худ мувофиқат кунед. Андозаи маълумот дар формати BinaryAST бо коди фишурдашудаи JavaScript-и хурдшуда муқоисашаванда аст ва суръати коркард бо бартараф кардани марҳилаи таҳлили матни манбаъ ба таври назаррас меафзояд. Илова бар ин, формат имкон медиҳад, ки компиляция ба байткод ҳамчун BinaryAST бор карда шавад, бидуни мунтазири анҷоми ҳама маълумот. Илова бар ин, таҳлил дар тарафи сервер ба шумо имкон медиҳад, ки функсияҳои истифоданашуда ва рамзи нолозимро аз намояндагии баргардонидашудаи BinaryAST хориҷ кунед, ки ҳангоми таҳлил дар тарафи браузер вақтро ҳам таҳлил ва ҳам интиқоли трафики нолозим сарф мекунад.

Хусусияти BinaryAST инчунин қобилияти барқарор кардани JavaScript-и хондашаванда мебошад, ки комилан бо версияи аслӣ якхела нест, аммо аз ҷиҳати маъно баробар аст ва номҳои якхелаи тағирёбандаҳо ва функсияҳоро дар бар мегирад (BinaryAST номҳоро захира мекунад, аммо маълумотро дар бораи мавқеъҳо дар код, форматкунӣ ва шарҳҳо). Тарафи дигари танга пайдоиши векторҳои нави ҳамла аст, аммо ба гуфтаи таҳиягарон, онҳо нисбат ба истифодаи алтернативаҳо, ба монанди тақсимоти байткод хеле хурдтар ва идорашавандатаранд.

Санҷишҳои рамзи facebook.com нишон доданд, ки таҳлили JavaScript 10-15% захираҳои CPU-ро сарф мекунад ва таҳлил нисбат ба тавлиди байткод ва тавлиди ибтидоии код барои JIT вақти бештарро мегирад. Дар муҳаррики SpiderMonkey вақти пурра сохтани АСТ 500-800 мсро мегирад ва истифодаи BinaryAST ин рақамро 70-90% коҳиш додааст.
Умуман, барои аксари фейерверкҳои веб ҳангоми истифодаи BinaryAST вақти таҳлили JavaScript дар реҷаи бе оптимизатсия 3-10% ва ҳангоми фаъол кардани режими нодида гирифтани функсияҳои истифоданашуда 90-97% кам мешавад.
Ҳангоми иҷро кардани маҷмӯи санҷиши JavaScript-и 1.2 МБ, истифодаи BinaryAST имкон дод, ки вақти оғозёбӣ аз 338 то 314 мс дар системаи мизи корӣ (Intel i7) ва аз 2019 то 1455 мс дар дастгоҳи мобилӣ (HTC One M8) суръат бахшад.

Манбаъ: opennet.ru

Илова Эзоҳ