Cloudflare, Mozilla жана Facebook JavaScript жүктөөсүн тездетүү үчүн BinaryASTти иштеп чыгышат

Cloudflare, Mozilla, Facebook жана Bloomberg инженерлери сунуш жаңы формат binaryAST браузерде сайттарды ачууда JavaScript кодун жеткирүү жана иштетүүнү тездетүү үчүн. BinaryAST талдоо фазасын сервер тарапка жылдырат жана буга чейин түзүлгөн абстракттуу синтаксис дарагын берет (Т КАТАРЫ). BinaryAST алгандан кийин, браузер JavaScript булак кодун талдоодон өтүп, компиляция стадиясына дароо өтө алат.

Сыноо үчүн даярдалган MIT лицензиясы боюнча берилген маалымдама ишке ашыруу. Node.js компоненттери талдоо үчүн колдонулат, ал эми оптималдаштыруу жана AST генерациясынын коду Rust тилинде жазылган. Браузер тарабында колдоо
BinaryAST мурунтан эле жеткиликтүү түнкү курулуштар Firefox. BinaryAST ичиндеги коддогучту сайттын акыркы инструменттеринин деңгээлинде да, прокси же мазмун жеткирүү тармагынын тарабында тышкы сайттардын скрипттерин таңгактоо үчүн да колдонсо болот. Учурда жумушчу топ тарабынан BinaryASTты стандартташтыруу процесси башталды ECMA TC39, андан кийин формат gzip жана brotli сыяктуу учурдагы мазмунду кысуу ыкмалары менен бирге жашай алат.

Cloudflare, Mozilla жана Facebook JavaScript жүктөөсүн тездетүү үчүн BinaryASTти иштеп чыгышат

Cloudflare, Mozilla жана Facebook JavaScript жүктөөсүн тездетүү үчүн BinaryASTти иштеп чыгышат

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% керектейт жана талдоо JIT үчүн байт кодду жана баштапкы кодду жаратууга караганда көбүрөөк убакытты талап кылат. SpiderMonkey кыймылдаткычында ASTти толугу менен курууга убакыт 500-800 мсни талап кылат жана BinaryASTти колдонуу бул көрсөткүчтү 70-90% га кыскартты.
Жалпысынан алганда, көпчүлүк веб фейерверктери үчүн BinaryASTти колдонууда JavaScript талдоо убактысы оптималдаштыруусуз режимде 3-10% га жана пайдаланылбаган функцияларды этибарга алуу режими иштетилгенде 90-97% га кыскарат.
1.2 МБ JavaScript сыноо топтомун иштетип жатканда, BinaryAST колдонуу ишке киргизүү убактысын рабочий тутумда (Intel i338) 314ден 7 мсге чейин жана мобилдик түзмөктө (HTC One M2019) 1455дан 8 мсге чейин ылдамдатууга мүмкүндүк берди.

Source: opennet.ru

Комментарий кошуу