Cloudflare, Mozilla и Facebook развиваат BinaryAST за да го забрзаат вчитувањето на JavaScript

Инженери од Cloudflare, Mozilla, Facebook и Bloomberg понудени нов формат БинарСТ за да се забрза испораката и обработката на кодот 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 MB (на пример, за LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), почетната обработка на JavaScript воведува значително доцнење. Фазата на парсирање на страната на прелистувачот исто така е забавена поради неможноста целосно да се изгради AST додека се вчитува кодот (прелистувачот мора да чека блоковите на кодот да завршат вчитување, како што е крајот на функциите, за да добие информациите што недостасуваат за да се анализираат тековните елементи).

Тие се обидуваат делумно да го решат проблемот со дистрибуција на кодот во минимизирана и компресирана форма, како и со кеширање на генерираниот бајтекод од прелистувачот. На современите сајтови, кодот се ажурира доста често, така што кеширањето само делумно го решава проблемот. WebAssembly може да биде решение, но бара експлицитно пишување во кодот и не е добро прилагоден за забрзување на обработката на постоечкиот JavaScript код.

Друга опција е да се испорача готов компајлиран бајтекод наместо JavaScript скрипти, но развивачите на моторите на прелистувачот се против тоа бидејќи бајтекодот од трета страна е тешко да се потврди, неговата директна обработка може да доведе до стратификација на веб, да се појават дополнителни безбедносни ризици и развој на потребен е универзален формат на бајтекод.

BinaryAST ви овозможува да се вклопите во вашиот тековен модел за развој и испорака на код без создавање нов бајтекод или менување на јазикот JavaScript. Големината на податоците во форматот BinaryAST е споредлива со компресираниот минификуван JavaScript код, а брзината на обработка со елиминирање на фазата на парсирање на изворниот текст значително се зголемува. Дополнително, форматот овозможува компилација во бајтокод кога се вчитува BinaryAST, без да се чека да се завршат сите податоци. Дополнително, парсирањето на страната на серверот ви овозможува да ги исклучите неискористените функции и непотребниот код од вратената претстава BinaryAST, што, при парсирање на страната на прелистувачот, губи време и за парсирање и за пренос на непотребен сообраќај.

Карактеристика на BinaryAST е, исто така, можноста за враќање на читлив JavaScript што не е сосема иста како оригиналната верзија, но е семантички еквивалентна и ги вклучува истите имиња на променливи и функции (BinaryAST зачувува имиња, но не зачувува информации за позициите во код, форматирање и коментари). Другата страна на паричката е појавата на нови вектори за напад, но според програмерите, тие се многу помали и поконтролирани отколку кога се користат алтернативи, како што е дистрибуцијата на бајтекод.

Тестовите на кодот на facebook.com покажаа дека парсирањето JavaScript троши 10-15% од ресурсите на процесорот и за парсирањето е потребно повеќе време отколку генерирањето бајтекод и иницијалното генерирање на код за JIT. Во моторот SpiderMonkey, времето за целосно да се изгради AST трае 500-800 ms, а употребата на BinaryAST ја намали оваа бројка за 70-90%.
Општо земено, за повеќето веб-огномети, кога се користи BinaryAST, времето на парсирање на JavaScript се намалува за 3-10% во режимот без оптимизација и за 90-97% кога е овозможен режимот на игнорирање на неискористените функции.
При извршување на тест сет JavaScript од 1.2 MB, користењето на BinaryAST овозможи времето на стартување да се забрза од 338 до 314 ms на десктоп систем (Intel i7) и од 2019 до 1455 ms на мобилен уред (HTC One M8).

Извор: opennet.ru

Додадете коментар