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

Версия V8 v6.1

· 3 мин. чтения
Команда V8

Каждые шесть недель мы создаем новую ветку V8 в рамках нашего процесса релиза. Каждая версия ответвляется от Git master V8 непосредственно перед этапом бета версии Chrome. Сегодня мы рады объявить о нашей новой ветке, версии V8 6.1, которая находится в стадии бета-тестирования до её выпуска в стабильной версии Chrome 61 через несколько недель. V8 v6.1 наполнен различными улучшениями для разработчиков. Мы хотим предложить вам предварительный обзор некоторых из основных моментов в преддверии релиза.

Улучшения производительности

Обход всех элементов Maps и Sets — либо через итерацию, либо через методы Map.prototype.forEach / Set.prototype.forEach — стал значительно быстрее, с увеличением производительности до 11× по сравнению с версией V8 6.0. Ознакомьтесь с посвященной этому постом в блоге для получения дополнительной информации.

Помимо этого, работа над производительностью других языковых функций также продолжалась. Например, метод Object.prototype.isPrototypeOf, который важен для кода без конструкторов, использующего в основном объектные литералы и Object.create вместо классов и функций-конструкторов, теперь всегда так же быстр, а часто и быстрее, чем использование оператора instanceof.

Вызовы функций и конструкторов с переменным количеством аргументов также стали значительно быстрее. Вызовы, выполненные с помощью Reflect.apply и Reflect.construct, получили увеличение производительности до 17× в последней версии.

Array.prototype.forEach теперь встроен в TurboFan и оптимизирован для всех основных типов элементов без дырок elements kinds.

Уменьшение размера бинарного файла

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

asm.js теперь проверяется и компилируется в WebAssembly

Если V8 обнаруживает код asm.js, он пытается его проверить. Валидный код asm.js затем транспилируется в WebAssembly. Согласно оценкам производительности V8, это, как правило, увеличивает пропускную производительность. Из-за добавленного этапа проверки возможно появление изолированных регрессий начальной производительности.

Обратите внимание, что эта функция была включена по умолчанию только на стороне Chromium. Если вы интегратор и хотите использовать валидатор asm.js, активируйте флаг --validate-asm.

WebAssembly

При отладке WebAssembly теперь можно отображать локальные переменные в DevTools, когда устанавливается точка останова в коде WebAssembly.

API V8

Обязательно ознакомьтесь с нашим обзором изменений API. Этот документ регулярно обновляется через несколько недель после каждого основного релиза.

Разработчики с активной проверкой исходного кода V8 могут использовать git checkout -b 6.1 -t branch-heads/6.1 для экспериментов с новыми функциями в V8 v6.1. Или же вы можете подписаться на бета-канал Chrome и вскоре сами опробовать новые функции.