Cloudflare, Mozilla və Facebook JavaScript yüklənməsini sürətləndirmək üçün BinaryAST hazırlayır

Cloudflare, Mozilla, Facebook və Bloomberg-dən mühəndislər təklif etdi yeni format binaryAST brauzerdə saytlar açarkən JavaScript kodunun çatdırılmasını və işlənməsini sürətləndirmək. BinaryAST təhlil mərhələsini server tərəfinə keçir və artıq yaradılmış abstrakt sintaksis ağacını təmin edir (AST). BinaryAST aldıqdan sonra brauzer JavaScript mənbə kodunu təhlil etmədən dərhal kompilyasiya mərhələsinə keçə bilər.

Test üçün hazırlanmışdır MIT lisenziyası ilə təmin edilən istinad tətbiqi. Node.js komponentləri təhlil üçün istifadə olunur və optimallaşdırma və AST generasiyası üçün kod Rustda yazılır. Brauzer tərəfi dəstəyi
BinaryAST artıq mövcuddur gecə məclisi Firefox. BinaryAST-da kodlayıcı həm son sayt alətləri səviyyəsində, həm də proksi və ya məzmun çatdırma şəbəkəsi tərəfində xarici saytların skriptlərini qablaşdırmaq üçün istifadə edilə bilər. Hazırda işçi qrupu tərəfindən BinaryAST-ın standartlaşdırılması prosesinə artıq başlanılıb ECMA TC39, bundan sonra format gzip və brotli kimi mövcud məzmun sıxılma üsulları ilə birlikdə mövcud ola biləcək.

Cloudflare, Mozilla və Facebook JavaScript yüklənməsini sürətləndirmək üçün BinaryAST hazırlayır

Cloudflare, Mozilla və Facebook JavaScript yüklənməsini sürətləndirmək üçün BinaryAST hazırlayır

JavaScript-i emal edərkən kodun yüklənməsi və təhlili mərhələsinə xeyli vaxt sərf olunur. Nəzərə alsaq ki, bir çox məşhur saytlarda yüklənmiş JavaScript-in həcmi 10 MB-a yaxındır (məsələn, LinkedIn üçün - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), JavaScript-in ilkin emalı əhəmiyyətli gecikmə gətirir. Brauzer tərəfindəki təhlil mərhələsi də kod yüklənərkən AST-ni tam şəkildə qurmaq mümkün olmadığı üçün yavaşlayır (brauzer kod bloklarının yüklənməsini tamamlamasını, məsələn, funksiyaların bitməsini gözləməlidir. cari elementləri təhlil etmək üçün çatışmayan məlumat).

Onlar kodu minimuma endirilmiş və sıxılmış formada yaymaqla, həmçinin yaradılan baytkodu brauzer tərəfindən keşləməklə problemi qismən həll etməyə çalışırlar. Müasir saytlarda kod olduqca tez-tez yenilənir, buna görə də keşləmə problemi yalnız qismən həll edir. WebAssembly həll yolu ola bilər, lakin o, kodun açıq şəkildə yazılmasını tələb edir və mövcud JavaScript kodunun işlənməsini sürətləndirmək üçün uyğun deyil.

Başqa bir seçim JavaScript skriptləri əvəzinə hazır tərtib edilmiş bayt kodunu çatdırmaqdır, lakin brauzer mühərriki tərtibatçıları bunun əleyhinədir, çünki üçüncü tərəfin bayt kodunu yoxlamaq çətindir, onun birbaşa işlənməsi Veb təbəqələşməsinə səbəb ola bilər, əlavə təhlükəsizlik riskləri yaranır və universal bayt kodu formatı tələb olunur.

BinaryAST sizə yeni bayt kodu yaratmadan və ya JavaScript dilini dəyişmədən cari kodun işlənməsi və çatdırılma modelinizə uyğunlaşmağa imkan verir. BinaryAST formatında verilənlərin ölçüsü sıxılmış kiçildilmiş JavaScript kodu ilə müqayisə edilə bilər və mənbə mətninin təhlili mərhələsinin aradan qaldırılması səbəbindən emal sürəti nəzərəçarpacaq dərəcədə artır. Bundan əlavə, format BinaryAST yükləndiyi üçün bütün məlumatların tamamlanmasını gözləmədən bayt kodu tərtib etməyə imkan verir. Bundan əlavə, server tərəfində təhlil istifadə olunmamış funksiyaları və lazımsız kodu geri qaytarılmış BinaryAST təmsilçiliyindən xaric etməyə imkan verir ki, bu da brauzer tərəfində təhlil edərkən həm təhlil etməyə, həm də lazımsız trafikin ötürülməsinə vaxt itirir.

BinaryAST-ın xüsusiyyəti həm də orijinal versiya ilə tam eyni olmayan, lakin semantik ekvivalent olan və dəyişənlərin və funksiyaların eyni adlarını ehtiva edən oxunaqlı JavaScript-i bərpa etmək qabiliyyətidir (BinaryAST adları saxlayır, lakin mövqelər haqqında məlumatı saxlamır. kod, formatlaşdırma və şərhlər). Sikkənin digər tərəfi yeni hücum vektorlarının ortaya çıxmasıdır, lakin tərtibatçıların fikrincə, onlar bayt kodu paylanması kimi alternativlərdən istifadə etdikdən daha kiçikdir və daha çox idarə olunur.

Facebook.com kodunun sınaqları göstərdi ki, JavaScript-in təhlili CPU resurslarının 10-15%-ni sərf edir və təhlil JIT üçün bayt kodu və ilkin kodun yaradılmasından daha çox vaxt aparır. SpiderMonkey mühərrikində AST-nin tam qurulması üçün vaxt 500-800 ms çəkir və BinaryAST-ın istifadəsi bu rəqəmi 70-90% azaldıb.
Ümumiyyətlə, əksər veb atəşfəşanlığı üçün BinaryAST istifadə edərkən JavaScript-in təhlil müddəti optimallaşdırmadan rejimdə 3-10%, istifadə olunmayan funksiyalara məhəl qoymamaq rejimi işə salındıqda isə 90-97% azalır.
1.2 MB JavaScript test dəstini işə salarkən BinaryAST-dan istifadə iş masası sistemində (Intel i338) işə başlama vaxtının 314-dən 7 ms-ə, mobil cihazda (HTC One M2019) 1455-dan 8 ms-ə qədər sürətlənməsinə imkan verdi.

Mənbə: opennet.ru

Добавить комментарий