Cloudflare, Mozilla va Facebook JavaScript-ni yuklashni tezlashtirish uchun BinaryASTni ishlab chiqadi

Cloudflare, Mozilla, Facebook va Bloomberg muhandislari taklif qilingan yangi format binaryAST brauzerda saytlarni ochishda JavaScript kodini yetkazib berish va qayta ishlashni tezlashtirish. BinaryAST tahlil qilish bosqichini server tomoniga o'tkazadi va allaqachon yaratilgan mavhum sintaksis daraxtini ta'minlaydi (AST). BinaryAST ni olgandan so'ng, brauzer JavaScript manba kodini tahlil qilishni chetlab o'tib, darhol kompilyatsiya bosqichiga o'tishi mumkin.

Sinov uchun tayyorlangan MIT litsenziyasi ostida taqdim etilgan ma'lumotnomani amalga oshirish. Node.js komponentlari tahlil qilish uchun ishlatiladi va optimallashtirish va AST yaratish uchun kod Rustda yozilgan. Brauzer tomonidan qo'llab-quvvatlash
BinaryAST allaqachon mavjud tungi yig'ilish Firefox. BinaryAST-dagi kodlovchi ham oxirgi sayt asboblari darajasida, ham proksi-server yoki kontentni etkazib berish tarmog'i tomonida tashqi saytlarning skriptlarini qadoqlash uchun ishlatilishi mumkin. Hozirda ishchi guruh tomonidan BinaryASTni standartlashtirish jarayoni allaqachon boshlangan ECMA TC39, shundan so'ng format gzip va brotli kabi mavjud kontentni siqish usullari bilan birga yashashi mumkin bo'ladi.

Cloudflare, Mozilla va Facebook JavaScript-ni yuklashni tezlashtirish uchun BinaryASTni ishlab chiqadi

Cloudflare, Mozilla va Facebook JavaScript-ni yuklashni tezlashtirish uchun BinaryASTni ishlab chiqadi

JavaScript-ni qayta ishlashda kodni yuklash va tahlil qilish bosqichiga katta vaqt sarflanadi. Ko'pgina mashhur saytlarda yuklab olingan JavaScript hajmi 10 MB ga yaqin ekanligini hisobga olsak (masalan, LinkedIn uchun - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), JavaScript-ni dastlabki qayta ishlash sezilarli kechikishni keltirib chiqaradi. Brauzer tomonidagi tahlil qilish bosqichi, shuningdek, kod yuklanganda ASTni to'liq qurish imkoni yo'qligi sababli sekinlashadi (brauzer kod bloklarining yuklanishini kutishi kerak, masalan, funktsiyalarning tugashini olish uchun). joriy elementlarni tahlil qilish uchun etishmayotgan ma'lumotlar).

Ular kodni minimallashtirilgan va siqilgan shaklda tarqatish, shuningdek, yaratilgan bayt-kodni brauzer tomonidan keshlash orqali muammoni qisman hal qilishga harakat qilmoqdalar. Zamonaviy saytlarda kod tez-tez yangilanadi, shuning uchun keshlash muammoni faqat qisman hal qiladi. WebAssembly yechim bo'lishi mumkin, lekin u kodni aniq kiritishni talab qiladi va mavjud JavaScript kodini qayta ishlashni tezlashtirish uchun unchalik mos kelmaydi.

Yana bir variant - JavaScript skriptlari o'rniga tayyor kompilyatsiya qilingan baytekodni etkazib berishdir, ammo brauzer mexanizmi ishlab chiquvchilari bunga qarshi, chunki uchinchi tomon baytekodini tekshirish qiyin, uni to'g'ridan-to'g'ri qayta ishlash veb-tabaqalanishga olib kelishi mumkin, qo'shimcha xavfsizlik xavflari paydo bo'ladi va universal bayt-kod formati talab qilinadi.

BinaryAST sizga yangi bayt-kod yaratmasdan yoki JavaScript tilini o'zgartirmasdan joriy kodni ishlab chiqish va yetkazib berish modelingizga moslashish imkonini beradi. BinaryAST formatidagi ma'lumotlar hajmi siqilgan kichiklashtirilgan JavaScript kodi bilan taqqoslanadi va manba matnini tahlil qilish bosqichini yo'q qilish orqali ishlov berish tezligi sezilarli darajada oshadi. Bundan tashqari, format barcha ma'lumotlar tugashini kutmasdan, BinaryAST yuklanganda bayt kodlash uchun kompilyatsiya qilish imkonini beradi. Bundan tashqari, server tomonida tahlil qilish sizga qaytarilgan BinaryAST taqdimotidan foydalanilmagan funktsiyalar va keraksiz kodlarni chiqarib tashlash imkonini beradi, bu esa brauzer tomonida tahlil qilishda keraksiz trafikni tahlil qilish va uzatish uchun vaqtni behuda sarflaydi.

BinaryAST-ning o'ziga xos xususiyati o'qilishi mumkin bo'lgan JavaScript-ni qayta tiklash qobiliyatidir, u asl versiya bilan mutlaqo bir xil emas, lekin semantik jihatdan ekvivalent va o'zgaruvchilar va funktsiyalarning bir xil nomlarini o'z ichiga oladi (BinaryAST nomlarni saqlaydi, lekin joylashuvlar haqidagi ma'lumotlarni saqlamaydi. kod, formatlash va sharhlar). Tanganing boshqa tomoni yangi hujum vektorlarining paydo bo'lishidir, ammo ishlab chiquvchilarning fikriga ko'ra, ular bayt kodini taqsimlash kabi muqobil variantlardan foydalanishga qaraganda ancha kichikroq va ko'proq nazorat qilinadi.

Facebook.com kodining testlari shuni ko'rsatdiki, JavaScript-ni tahlil qilish protsessor resurslarining 10-15 foizini sarflaydi va tahlil qilish JIT uchun bayt kodini va dastlabki kodni yaratishdan ko'ra ko'proq vaqt talab etadi. SpiderMonkey dvigatelida ASTni to'liq qurish vaqti 500-800 ms ni oladi va BinaryAST dan foydalanish bu ko'rsatkichni 70-90% ga qisqartirdi.
Umuman olganda, ko'pgina veb-salyutlar uchun BinaryAST-dan foydalanganda JavaScript-ni tahlil qilish vaqti optimallashtirilmagan rejimda 3-10% ga va foydalanilmagan funktsiyalarni e'tiborsiz qoldirish rejimi yoqilganda 90-97% ga kamayadi.
1.2 MB JavaScript test majmuasini ishga tushirishda BinaryAST-dan foydalanish ishga tushirish vaqtini ish stoli tizimida (Intel i338) 314 dan 7 ms gacha va mobil qurilmada (HTC One M2019) 1455 dan 8 ms gacha tezlashtirish imkonini berdi.

Manba: opennet.ru

a Izoh qo'shish