Выпуск V8 v8.9
Каждые шесть недель мы создаем новую ветку 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 и вскоре попробовать новые функции самостоятельно.