В движке V8 появилась новая подсистема JIT-компиляции JavaScript-кода
9 декабря 2010 года
Компания 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-разрядных платформ.
Подобные результаты достигнуты благодаря реализации техники адаптивной JIT-компиляции, суть которой в проведении дополнительной глубокой оптимизации только для наиболее часто выполняемого кода, не тратя при этом время на оптимизацию редко используемого кода. Эффективность подобного метода оптимизации проявляется только для достаточно длительно выполняемого кода, для которого удается накопить определенный объем статистики, поэтому в синтетических тестах, подобных SunSpider, выполняемых за несколько микросекунд, эффект от технологии Crankshaft минимален.
Основные компоненты Crankshaft:
- Базовый компилятор, используемый для быстрой начальной генерации кода без задействования ресурсоёмких методов оптимизации. Процесс компиляции при использовании базового компилятора Crankshaft занимает примерно в два раза меньше времени и генерирует на 30% меньше кода, чем при использовании стандартного компилятора в движке V8 из состава Chrome 9;
- Работающая на лету система профилирования кода (runtime profiler), в реальном режиме времени анализирующая выполняемый код и выявляющая наиболее часто используемые конструкции, на выполнение которых тратится больше всего времени;
- Оптимизирующий компилятор, перекомпилирующий и дополнительно оптимизирующий только часто используемый код, выявленный системой профилирования. Для выявленного кода используются наиболее подходящие оптимизации, решение о задействовании которых принимается на основании накопленной статистики. Компилятор использует SSA-представление при выполнении таких оптимизаций, как вынос неиспользуемых в цикле конструкций за его пределы, распределение регистров на основе линейного сканирования и inline-подстановка кода функций;
- Деоптимизатор, позволяющий отменить внесенные оптимизирующим компилятором оптимизации (вернуть к коду, созданному базовым компилятором), в случае, если предположения о возможности дальнейшей оптимизации данного кода оказались слишком оптимистичными.
Дополнение: Один из разработчиков Mozilla, написал отзыв о Crankshaft, сравнив данную систему с JIT-компиляторами Tracemonkey и JaegerMonkey. Отмечено, что в Crankshaft реализованы замечательные идеи, но Mozilla не отстает и тоже работает над усовершенствованием работы системы динамической оптимизации и статического анализа.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.