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

Выпуск V8 v8.9

· 3 мин. чтения
Ингвар Степанян ([@RReverser](https://twitter.com/RReverser)), ожидает звонка

Каждые шесть недель мы создаем новую ветку V8 в рамках нашего процесса выпуска. Каждая версия отделяется от основного репозитория V8 сразу перед этапом бета-версии Chrome. Сегодня мы рады представить нашу новейшую ветку, V8 версии 8.9, которая находится в бета-версии до ее выпуска с Chrome 89 Stable через несколько недель. V8 v8.9 наполнен множеством полезных функций для разработчиков. В этом посте представлен обзор некоторых ключевых моментов перед выпуском.

JavaScript

Верхнеуровневый await

Верхнеуровневый await доступен в рендеринговом движке Blink версии 89, который является основным внедряющим механизмом V8.

В автономной версии V8 верхнеуровневый await остается за флагом --harmony-top-level-await.

Для получения дополнительных сведений, пожалуйста, ознакомьтесь с нашим объяснением.

Производительность

Более быстрые вызовы с несоответствием размеров аргументов

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

В случае недостаточной передачи оставшиеся параметры получают значение undefined. В случае избыточной передачи оставшиеся аргументы могут быть доступны через оставшийся параметр и свойство Function.prototype.arguments либо они просто являются лишними и игнорируются. Многие веб- и Node.js-фреймворки в наши дни используют эту функцию JavaScript для поддержки необязательных параметров и создания более гибкого API.

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

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

График показывает, что при работе в режиме без JIT-компиляции (Ignition) больше не существует издержек, а производительность увеличилась на 11,2%. При использовании TurboFan достигается ускорение до 40%. Издержки по сравнению со случаем без несоответствия обусловлены небольшой оптимизацией в эпилоге функции. Для получения дополнительной информации см. документ проектирования.

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

V8 API

Пожалуйста, используйте git log branch-heads/8.8..branch-heads/8.9 include/v8.h, чтобы получить список изменений в API.

Разработчики с активной копией V8 могут использовать git checkout -b 8.9 -t branch-heads/8.9, чтобы поэкспериментировать с новыми функциями в V8 v8.9. Кроме того, вы можете подписаться на бета-канал Chrome и вскоре попробовать новые функции самостоятельно.