В движке V8 появилась новая подсистема компиляции JavaScript-кода

Компания Google представила новую технологию агрессивной оптимизации Crankshaft для открытого JavaScript-движка V8, используемого в браузерах Google Chrome и Chromium. Для участков кода, связанных с большим объемом длительных вычислений (например, математические операции, цикличная обработка данных, рекурсивные вызовы и криптография), технология Crankshaft позволяет добиться значительного прироста производительности, в некоторых случаях привести к ускорению более чем в два раза.

Кроме увеличения производительности, Crankshaft позволяет заметно сократить время запуска больших web-приложений, таких как GMail, - при использовании Crankshaft загрузка страниц, содержащих большой объем JavaScript-кода в среднем занимает на 12% меньше времени. По заявлению Google, Crankshaft является базисом для реализации дальнейших оптимизацией в движке V8, которые помогут довести производительность JavaScript до уровня, приемлемого для функционирования web-приложений следующего поколения.

В настоящий момент код Crankshaft для 32-разрядных платформ Intel интегрирован в кодовую базу движка V8 и доступен в составе ежедневных тестовых сборок браузера Chrome. Портирование системы для архитектуры ARM и 64-разрядных систем находится в процессе работы.

Подобные результаты достигнуты благодаря реализации техники адаптивной компиляции, суть которой в проведении дополнительной глубокой оптимизации только для наиболее часто выполняемого кода, не тратя при этом время на оптимизацию редко используемого кода. Эффективность подобного метода оптимизации проявляется только для достаточно длительно выполняемого кода, для которого удается накопить определенный объем статистики, поэтому в синтетических тестах, подобных SunSpider, выполняемых за несколько микросекунд, эффект от технологии Crankshaft минимален.

Основные компоненты Crankshaft:

  1. Базовый компилятор, используемый для быстрой начальной генерации кода без задействования ресурсоёмких методов оптимизации. Процесс компиляции при использовании базового компилятора Crankshaft занимает примерно в два раза меньше времени и генерирует на 30% меньше года, чем при использовании стандартного компилятора в движке V8 из состава Chrome 9;
  2. Работающая на лету система профилирования кода (runtime profiler), в реальном режиме времени анализирующая выполняемый код и выявляющая наиболее часто используемые конструкции, на выполнение которых тратится больше всего времени;
  3. Оптимизирующий компилятор, перекомпилирующий и дополинтельно оптимизирующий только часто используемый код, выявленный системой профилирования. Для выявленного кода используются наиболее подходящие оптимизации, решение о задействовании которых принимается на основании накопленной статистики. Компилятор использует SSA-представление при выполнении таких оптимизаций, как вынос неиспользуемых в цикле конструкций за его пределы, распределение регистров на основе линейного сканирования и inline-подстановка кода функций;
  4. Деоптимизатор, позволяющий оменить внесенные оптимизирующим компилятором оптимизации (вернуть к коду, созданному базовым компилятором), в случае, если предположения о возможности дальнейшей оптимизации данного кода оказались слишком оптимистичными.

©  OpenNet