L інженери з 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 на льоту під час завантаження коду (браузер повинен чекати завантаження блоків коду, наприклад закінчення функцій, щоб отримати відсутні дані для аналізу поточних елементів).
Частково вони намагаються вирішити проблему, розподіляючи код у мінімізованому та стислому вигляді, а також кешуючи, створений браузером.
Тоді як на сучасних сайтах код оновлюється досить часто, тому кешування лише частково вирішує проблему.
Рішенням може бути WebAssembly, але це вимагає явного використання запису в коді і це не дуже підходить для прискорення обробки існуючого коду JavaScript.
Інший варіант - доставити готовий скомпільований код замість скриптів JavaScript, але розробники механізму браузера проти цього, оскільки сторонній код важко перевірити, його безпосередня обробка може призвести до відокремлення від Інтернету., Виникають додаткові загрози безпеці .
BinaryAST - це рішення
BinaryAST дозволяє інтегрувати в поточну модель розвитку і доставка коду без створення нового байт-коду і без зміни мови JavaScript.
Розмір даних у форматі BinaryAST порівнянний із зменшеним кодом JavaScript і стискається, і швидкість обробки за рахунок виключення фази аналізу джерела значно зростає.
Крім того, формат дозволяє компілювати в байт-код у міру завантаження BinaryAST, не чекаючи завершення всіх даних.
Особливістю BinaryAST є також можливість відновлення читабельного JavaScript, не один на один, який відповідає вихідній версії, але є семантично еквівалентним і включає однакові назви змінних та функцій (BinaryAST зберігає імена, але не зберігає інформацію про позицію в коді, форматуванні та коментарях).
Інша сторона медалі - поява нових векторів для атак, але на думку розробників, вони значно менші та керованіші, ніж при використанні альтернатив, таких як байтовий розподіл коду.
Тестування коду facebook показало 10-15% ресурсів процесора вони витрачаються на синтаксичний розбір JavaScript і займають більше часу на аналіз, ніж на те, щоб генерувати байт-код та початкове кодування для JIT.
Підтримка BinaryAST тепер доступний у нічних версіях Firefox.
Фуенте: https://blog.cloudflare.com