Cloudflare, Mozilla және Facebook JavaScript жүктеуді жылдамдату үшін BinaryAST әзірлейді

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 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 мс-ке дейін арттыруға мүмкіндік берді.

Ақпарат көзі: opennet.ru

пікір қалдыру