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

Релиз V8 v6.3

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

Каждые шесть недель мы создаем новую ветку V8 в рамках нашего процесса релиза. Каждая версия отделяется от главной ветки Git V8 сразу перед этапом бета-версии Chrome. Сегодня мы рады объявить о нашей новой ветке, V8 версии 6.3, которая будет находиться в бета-версии до выпуска вместе со стабильной версией Chrome 63 через несколько недель. V8 v6.3 наполнена всеми видами улучшений для разработчиков. Этот пост предоставляет предварительный обзор некоторых основных моментов в преддверии релиза.

Скорость

Jank Busters III стал частью проекта Orinoco. Реализована конкурентная маркировка (70-80% маркировки выполняется в неблокирующем потоке).

Анализатор больше не нуждается в повторной предварительной обработке функции. Это приводит к медианному улучшению времени анализа на 14% на нашем внутреннем стартап-бенчмарке Top25.

string.js полностью перенесён на CodeStubAssembler. Огромное спасибо @peterwmwong за его невероятный вклад! Для разработчиков это означает, что встроенные строковые функции, такие как String#trim, стали значительно быстрее начиная с V8 v6.3.

Производительность Object.is() теперь примерно сопоставима с альтернативами. В общем и целом, V8 v6.3 продолжает путь к улучшению производительности ES2015+ функций. Среди прочего мы повысили скорость полиморфного доступа к символам, полиморфную инлайнизацию вызовов конструкторов и (тегированные) шаблонные литералы.

Производительность V8 за последние шесть релизов

Слабый список оптимизированных функций удалён. Дополнительную информацию можно найти в посвящённой публикации блога.

Указанные пункты представляют собой неполный список улучшений скорости. Было сделано ещё много других работ, связанных с производительностью.

Потребление памяти

Барьеры записи переведены на использование CodeStubAssembler. Это экономит около 100 КБ памяти на каждый изолят.

Функции языка JavaScript

Теперь V8 поддерживает следующие функции этапа 3: динамический импорт модулей через import(), Promise.prototype.finally() и асинхронные итераторы/генераторы.

С динамическим импортом модулей стало очень просто импортировать модули на основе условий времени выполнения. Это полезно, когда приложение должно лениво загружать определенные модули кода.

Promise.prototype.finally предоставляет способ легко очищаться после того, как промис будет завершён.

Итерация с использованием асинхронных функций стала более удобной с появлением асинхронных итераторов/генераторов.

В Intl теперь поддерживается Intl.PluralRules. Этот API позволяет эффективно обрабатывать интернационализированные формы множественного числа.

Инспектор/Отладка

В Chrome 63 покрытие блоков также поддерживается в интерфейсе DevTools. Обратите внимание, что протокол инспектора уже поддерживает покрытие блоков, начиная с V8 v6.2.

API V8

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

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