BinaryAST: проект Cloudflare, Mozilla и Facebook для ускорения загрузки JavaScript

двоичный-аст

инженеры из Cloudflare, Mozilla, Facebook и Bloomberg начали работать над новый проект под названием «БинарныйAST для ускорения доставки и обработки кода JavaScript при открытии сайтов в веб-браузерах.

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

Для тестирования подготовлена ​​эталонная реализация, подготовленная по лицензиям MIT. Компоненты Node.js используются для анализа кода для оптимизации и генерации AST, он написан на Rust.

Кодировщик в BinaryAST может использоваться как на уровне набора инструментов конечного сайта, так и для упаковки сценариев внешнего сайта на стороне прокси или в сети доставки контента.

Сегодня, Процесс стандартизации BinaryAST рабочей группой ECMA TC39 уже начался, после чего формат сможет сосуществовать с существующими методами сжатия доставленного контента, такими как gzip и brotli.

Так много файлов javascript влияют на загрузку веб-страниц

Значительное время при обработке JavaScript занимает фаза загрузки и разбора кода.

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

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

Частично они пытаются решить проблему за счет распространения кода в свернутом и сжатом виде, а также за счет кеширования, генерируемого браузером.

Двоичный-аст-1

В то время как на современных сайтах код обновляется довольно часто, поэтому кеширование решает проблему лишь частично.

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

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

BinaryAST - это решение

BinaryAST позволяет интегрироваться в текущую модель разработки и доставка кода без создания нового байт-кода и без изменения языка JavaScript.

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

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

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

Обратная сторона медали - появление новых векторов атак, но, по словам разработчиков, они значительно меньше и управляемее, чем при использовании альтернатив, таких как распределение байтового кода.

Тесты кода Facebook показали 10-15% ресурсов процессора они тратятся на синтаксический анализ JavaScript, и на синтаксический анализ уходит больше времени, чем на генерацию байт-кода и начальную генерацию кода для JIT.

Поддержка BinaryAST теперь доступен в ночных версиях Firefox.

источник: https://blog.cloudflare.com


Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.