Pull to refresh

Новая версия V8 будет на 50% быстрее

Reading time2 min
Views1.8K
Original author: Kevin Millikin, Florian Schneider at Chromium Blog
Сегодня мы представляем вам Crankshaft (коленчатый вал — прим. пер.), новую инфраструктуру компиляции для V8, JavaScript движка Google Chrome. Используя агрессивную оптимизацию, Crankshaft значительно повышает производительность ресурсоёмких JavaScript приложений — часто более чем в два раза! Это делает интернет-страницы и приложения, использующие сложный код, более отзывчивыми и быстрыми для пользователей. Сравним производительность Chrome с Crankshaft и без него на стандартном наборе тестов V8:





Больше всего Crankshaft улучшает результаты тестов Richards, DeltaBlue и Crypto. Это показывает, что мы ускорили операции доступа к свойствам объектов, арифметические операции, тяжёлые циклы и вызовы функций. В целом, Crankshaft повышает производительность V8 на 50% на этом наборе тестов. Это самый большой прорыв с момента релиза Chrome в 2008 году:



В придачу к увеличению пиковой производительности, измеренной на тестах, Crankshaft ускорил и время инициализации веб-приложений, таких как GMail. Наш тест с перезагрузкой страницы показал, что Crankshaft ускоряет время загрузки страницы со значительным количеством JavaScript кода на 12%.

Crankshaft использует адаптивную компиляцию для улучшения как времени запуска, так и максимальной производительности. Идея заключается в том, чтобы значительно оптимизировать часто выполняющийся код и не тратить время на оптимизацию кода, выполняющегося редко. Из-за этого тесты, выполняющиеся за несколько миллисекунд ( например SunSpider) покажут лишь незначительное ускорение при использовании Crankshaft. Чем крупнее приложение, тем большее будет эффект от нового движка.

Crankshaft состоит из четырёх основных компонент:
  1. Базовый компилятор используется для всего кода. Он работает быстро и не делает сложных оптимизаций. Базовый в два раза быстрее чем V8 в Chrome 9 и создаёт на 30% меньше кода.
  2. Профайлер, который следит за процессом выполнения и находит «горячие» участки кода, на выполнение которых тратиться больше всего времени.
  3. Оптимизирующий компилятор, который заново компилирует выявленные «горячие» участки кода. Он использует SSA-представление для таких оптимизаций, как перемещение или вынос инвариантов циклов, linear scan [1] и встраивание. Оптимизирующий компилятор в своей работе использует информацию, собираемую при выполнении первоначальной версии кода.
  4. Поддержка деоптимизации, благодаря которой оптимизирующий компилятор может быть свободен в своих оценках относительно полезности отдельных оптимизаций. В случае, если предположения, использованные компилятором для выбора той или иной оптимизации окажутся неверными, то есть возможность вернуться к выполнению кода, полученного базовым компилятором.
V8 с Crankshaft для процессоров Интел с 32-битной архитектурой уже доступны в bleeding edge репозитории V8 и тестовых версиях Google Chrome. Работа над сборками для ARM и 64-битных архитектур уже ведётся.

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

Kevin Millikin, Software Engineer and Florian Schneider, Software Engineer

[1] Спасибо mraleph за уточнения к переводу.
Tags:
Hubs:
+72
Comments90

Articles