В Chrome тестируют новый подход к компиляции JavaScript
15 февраля 2017 года
Разработчики JavaScript-движка V8 объявили о начале тестирования упрощённой схемы компиляции JavaScript, основанной на применении интерпретатора Ignition и JIT-компилятора Turbofan для всего JavaScript, а не для специфичных ситуаций. Новый режим включен по умолчанию для контрольной группы пользователей веток Chrome Canary и Chrome Developer. Остальные могут включить новый режим, активировав опцию "Experimental JavaScript Compilation Pipeline" в "chrome:flags".
Ранее в V8 использовался достаточно сложный многоуровневый процесс компиляции JavaScript, в котором одноразовый код интерпретировался на первой стадии, после чего генерировался машинный код для JIT, который периодически обновлялся и улучшался двумя оптимизирующими JIT-компиляторами. В частности, вначале генерировался машинный код для всего JavaScript при помощи быстрого JIT-компилятора FullCodegen, а для устранения задержки перед готовностью JIT-компилятора применялся интерпретатор Ignition, который также брал на себя единичные операции, не требующие высокой скорости выполнения, для которых нет смысла привлекать полноценный JIT.
Вместо машинного кода Ignition использует байткод, выполняемый в регистровой виртуальной машине, который требует в 2-4 раза меньше памяти, а по скорости выполнения в реальных приложениях очень близок к неоптимизированному машинному коду. После формирования базового машинного кода для JIT, вступали в строй два дополнительных JIT-компилятора, которые генерировали оптимизированный код, учитывая накопленную статистику. Выбор того или иного оптимизирующего компилятора зависел от контекста, но Turbofan изначально развивался как будущая замена Crankshaft, по мере тестирования и стабилизации забирая на себя всё больше функций.
Новая схема подразумевает применение на первой стадии только интерпретатора с байткодом с подключением по мере выполнения кода JIT-компилятора Turbofan. Таким образом, полностью исключается фаза упреждающей генерации неоптимизированного машинного кода JIT-компилятром FullCodegen, а также удаляются привязки к старому JIT-компилятору Crankshaft и лишняя логика разветвлений. Ожидается, что изменение положительно скажется на производительности реальных JavaScript-приложений и позволит снизить расход памяти.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.