The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Cloudflare, Mozilla и Facebook развивают BinaryAST  для уско..."
Отправлено opennews, 17-Май-19 20:33 
Инженеры из компаний Cloudflare, Mozilla, Facebook и Bloomberg предложили (https://blog.cloudflare.com/binary-ast/) новый формат BinaryAST (https://github.com/tc39/proposal-binary-ast)  для ускорения доставки и обработки JavaScript кода при открытии сайтов в браузере. BinaryAST выносит фазу синтаксического разбора на сторону сервера и поставляет уже сформированное абстрактное синтаксическое дерево (AST (https://ru.wikipedia.org/wiki/%D0%90%D0%.... При получении BinaryAST  браузер сразу может перейти на стадию компиляции, минуя парсинг исходного кода JavaScript.

Для тестирования подготовлена (https://github.com/binast/binjs-ref) эталонная реализация, поставляемая под лицензий MIT. Для парсинга используется компоненты Node.js, а код для оптимизации и формирования AST написан на языке Rust. На стороне браузеров поддержка  
BinaryAST уже доступна в ночных сборках (https://www.mozilla.org/en-US/firefox/channel/desktop/#nightly) Firefox. Кодировщик в BinaryAST может применяться как на уровне инструментария конечного сайта, так и для упаковки скриптов внешних сайтов на стороне прокси или сети доставки контента. В настоящее время уже начался процесс стандартизации BinaryAST рабочей группой ECMA TC39 (https://tc39.github.io/), после завершения которой формат сможет сосуществовать вместе с существующими методами сжатия отдаваемого контента, такими как gzip и brotli.


Значительное время при обработке JavaScript занимает фаза загрузки и синтаксического разбора кода. С учётом того, что объём загружаемого JavaScript на многих популярных сайтах приближается к 10 Мб (например для LinkedIn - 7.2Мб,  Facebook - 7.1Мб, Gmail - 3.9Мб) первичная обработка JavaScript вносит существенную задержку. Стадия парсинга на стороне браузера также замедляется из-за невозможности полноценного построения AST на лету, по мере загрузки кода (браузеру приходится ожидать завершения загрузки блоков кода, например  конца функций, для получения недостающей для разбора текущих элементов информации).

Частично проблему пытаются решить через распространение кода в минимизированном и сжатом виде, а также при помощи кэширования браузером сгенерированного байткода. На современных сайтах код обновляется достаточно часто, поэтому кэширование лишь частично решает проблему. Выходом мог бы стать WebAssembly, но он требует использования явной типизации в коде и плохо подходит для ускорения обработки уже существующего кода на JavaScript.

Другим вариантом является доставка готового скомпилированного байткода вместо JavaScript-скриптов, но разработчики браузерных движков выступают против, так как сторонний байткод трудно верифицировать, его прямая обработка может привести к расслоению Web, возникают  дополнительные угрозы безопасности и требуется разработка формата универсального байткода.

BinaryAST позволяет вписаться в текущую модель разработки и доставки кода без создания нового байткода и без изменения языка JavaScript. Размер данных в формате BinaryAST сопоставим со сжатым минифицированным JavaScript-кодом, а скорость обработки за счёт исключения фазы парсинга исходных текстов заметно увеличивается. Кроме того, формат позволяет выполнять компиляцию в байткод по мере загрузки BinaryAST, не ожидая завершения получения всех данных.


Особенностью BinaryAST также является возможность восстановления читаемого JavaScript не один в один совпадающего с исходным вариантом, но семантически эквивалентного и включающего те же имена переменных и функций (BinaryAST сохраняет имена, но не сохраняет информацию о позициях в коде, форматирование и комментарии). Обратной стороной медали является появление новых векторов для атак, но по мнению разработчиков они значительное меньше и более контролируемы, чем при применении альтернатив, таких распространение байткода.

Тесты кода facebook.com показали, что на разбор JavaScript тратится 10-15%  ресурсов CPU и на парсинг уходит больше времени, чем  на генерацию байткода и начальное формирование кода для JIT. В движке SpiderMonkey время полного построения AST занимает 500-800 мс и применение BinaryAST позволило сократить этот показатель на 70-90%.

URL: https://blog.cloudflare.com/binary-ast/
Новость: https://www.opennet.ru/opennews/art.shtml?num=50701

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру