Перейти к основному содержимому

Даем V8 заблаговременное уведомление: Более быстрый запуск JavaScript с явными подсказками компиляции

· 3 мин. чтения
Марья Хельтта

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

Земля на горизонте: покидаем Море узлов

· 27 мин. чтения
Дариус Меркадьер

Финальный уровень оптимизирующего компилятора V8 — Turbofan — известен тем, что является одним из немногих крупномасштабных компиляторов, использующих Море узлов (SoN). Однако, почти три года назад мы начали избавляться от Моря узлов и вернулись к более традиционному графу управления потоком (CFG) промежуточному представлению (IR), который мы назвали Turboshaft. На данный момент весь бэкенд JavaScript в Turbofan использует Turboshaft, и WebAssembly использует Turboshaft на протяжении всего своего конвейера. Две части Turbofan все еще используют некоторые элементы Моря узлов: встроенный конвейер, который мы постепенно заменяем на Turboshaft, и фронтенд JavaScript конвейера, который мы заменяем на Maglev, другое промежуточное представление на основе CFG. В этом посте объясняются причины, которые привели нас к отказу от Моря узлов.

Ускорение V8 с помощью изменяемых чисел в куче

· 5 мин. чтения
[Виктор Гомес](https://twitter.com/VictorBFG), манипулятор битами

В V8 мы постоянно стремимся улучшать производительность JavaScript. В рамках этих усилий мы недавно пересмотрели набор бенчмарков JetStream2, чтобы устранить узкие места производительности. В этом посте описывается конкретная оптимизация, которую мы внедрили, что привело к значительному улучшению результата async-fs в 2.5x, способствуя заметному улучшению общего счета. Оптимизация была вдохновлена этим бенчмарком, но подобные шаблоны действительно встречаются в реальном коде.

Представляем WebAssembly JavaScript Promise Integration API

· 13 мин. чтения
Фрэнсис МакКейб, Тибо Мишо, Илья Резвов, Брэндан Даль

API JavaScript Promise Integration (JSPI) позволяет приложениям WebAssembly, которые были написаны с расчётом на синхронный доступ к внешней функциональности, работать корректно в среде, где функциональность фактически является асинхронной.

В API WebAssembly JSPI появились изменения

· 6 мин. чтения
Фрэнсис МакКейб, Тибо Мишо, Илья Резвов, Брэндан Даль

В API интеграции JavaScript Promise (JSPI) WebAssembly появился новый API, доступный в Chrome версии M126. Мы расскажем, что изменилось, как использовать это с Emscripten, и как выглядит дорожная карта JSPI.

JSPI — это API, который позволяет приложениям WebAssembly, использующим последовательные API, обращаться к веб-API, которые являются асинхронными. Многие веб-API работают с объектами JavaScript Promise: вместо непосредственного выполнения запрашиваемой операции они возвращают Promise для выполнения. С другой стороны, многие приложения, скомпилированные в WebAssembly, приходят из мира C/C++, где доминируют API, блокирующие вызвавшего до завершения операции.

Песочница V8

· 13 мин. чтения
Самуэль Гросс

Спустя почти три года после первоначального проектного документа и сотен CL за это время, песочница V8 — лёгкая песочница в процессе выполнения для V8 — достигла стадии, когда её больше не считают экспериментальной функцией безопасности. Начиная с сегодняшнего дня, Песочница V8 включена в Программу вознаграждений за уязвимости Chrome (VRP). Хотя ещё остаётся множество задач, которые нужно решить, прежде чем песочница станет надёжной границей безопасности, включение её в VRP является важным шагом в этом направлении. Таким образом, Chrome 123 можно рассматривать как своего рода «бета» выпуск песочницы. Этот пост в блоге использует эту возможность для обсуждения мотивации создания песочницы, демонстрации того, как она предотвращает распространение повреждения памяти в V8 внутри хост-процесса, и объяснения, почему это необходимый шаг на пути к безопасности памяти.

WebAssembly JSPI выходит на этап внутреннего тестирования

· 3 мин. чтения
Фрэнсис МакКейб, Тибо Мишо, Илья Резвов, Брендан Даль

JavaScript Promise Integration (JSPI) API для WebAssembly входит в этап внутреннего тестирования с выпуском Chrome версии M123. Это означает, что вы можете протестировать, принесли ли вы и ваши пользователи пользу от этого нового API.

JSPI — это API, который позволяет так называемому последовательному коду, скомпилированному для WebAssembly, получать доступ к веб-API, которые являются асинхронными. Многие веб-API разработаны на основе JavaScript Promise: вместо немедленного выполнения запрашиваемой операции они возвращают Promise для ее выполнения. Когда действие наконец выполнено, планировщик задач браузера вызывает любые обратные вызовы с Promise. JSPI интегрируется в эту архитектуру, позволяя приложению WebAssembly приостанавливать выполнение при возврате Promise и возобновлять выполнение, когда Promise разрешается.

Static Roots: Объекты с Константными Адресами во Времени Компиляции

· 4 мин. чтения
Оливье Флюкигер

Вы когда-нибудь задумывались, откуда взялись undefined, true и другие основные объекты JavaScript? Эти объекты являются основами любых пользовательских объектов и должны существовать первыми. V8 называет их неизменяемыми корнями, которые располагаются в собственной куче – только для чтения. Так как они постоянно используются, быстрый доступ крайне важен. А что может быть быстрее правильного угадывания их адреса в памяти на этапе компиляции?

V8 быстрее и безопаснее, чем когда-либо!

· 7 мин. чтения
[Виктор Гомес](https://twitter.com/VictorBFG), эксперт по Глюхвейну

Добро пожаловать в захватывающий мир V8, где скорость — это не просто функция, а образ жизни. Наступил момент попрощаться с 2023 годом и отпраздновать впечатляющие достижения, которых V8 достиг в этом году.

Благодаря инновационным оптимизациям производительности V8 продолжает расширять границы возможного в постоянно меняющемся ландшафте Веба. Мы представили новый компилятор среднего уровня и реализовали множество улучшений в инфраструктуре компилятора высокого уровня, среде выполнения и сборщике мусора, что привело к значительному увеличению скорости работы.

Maglev - самый быстрый оптимизирующий JIT V8

· 13 мин. чтения
[Тун Верваст](https://twitter.com/tverwaes), [Лешек Свирски](https://twitter.com/leszekswirski), [Виктор Гомес](https://twitter.com/VictorBFG), Оливье Флюкигер, Дариус Меркадье и Камилло Бруни — поваров не так много, чтобы испортить бульон

В Chrome M117 мы представили новый оптимизирующий компилятор: Maglev. Maglev расположен между нашими существующими компиляторами Sparkplug и TurboFan, выполняя роль быстрого оптимизирующего компилятора, который создает достаточно хороший код достаточно быстро.

До 2021 года V8 имел два основных уровня исполнения: Ignition, интерпретатор; и TurboFan, оптимизирующий компилятор V8, ориентированный на максимальную производительность. Весь код JavaScript сначала компилируется в байт-код Ignition и исполняется путем интерпретации. Во время выполнения V8 отслеживает поведение программы, включая формы объектов и типы. Метаданные выполнения и байт-код поступают в оптимизирующий компилятор для генерации высокопроизводительного, часто спекулятивного машинного кода, который работает значительно быстрее, чем интерпретатор.