Chrome 91 рендерит страницы на 23% быстрее. Спасибо третьему компилятору

Kate

Administrator
Команда форума
// The Sparkplug compiler (abridged).
for (; !iterator.done(); iterator.Advance()) {
VisitSingleBytecode();
}
Новый неоптимизирующий JavaScript-компилятор Sparkplug напрямую компилирует JavaScript в машинный код, без всяких промежуточных представлений, за однострочный проход. Это одна из оптимизаций в движке V8

Участники опенсорсного проекта Chromium из компании Google только что выкатили новую версию браузера Chrome 91 на стабильном канале. Как обычно, в новой версии сделано много изменений. Например, десктопный режим на больших мобильных экранах включается по умолчанию, улучшен дизайн веб-форм (поля, чекбоксы, кнопки), улучшены интерфейсы File System Access API, сделано автоматическое открытие PWA по ссылкам на веб-сайтах через манифест capture_links, реализована экспериментальная поддержка продвинутого медиапротокола WebTransport (вместо более медленного WebSocket) и многое другое. Кроме этих мелких, есть и очень серьёзное изменение, которое коснётся каждого.

Конечно, это изменение ожидаемо, если следить за документацией на бета- и альфа-каналах. Но остальные люди сегодня могут с удивлением обнаружить, что после обновления Chrome стал рендерить страницы гораздо быстрее.
В этой версии проведён ряд оптимизаций, так что в среднем производительность браузера выросла до 23% на рендеринге реальных веб-страниц, сказано в официальном блоге.

Конкретный рост производительности зависит от платформы. Проверить скорость выполнения скриптов и других функций своего браузера можно на сайте Speedometer. Тест подходит и для сравнения между собой скорости разных версий одного браузера или разных браузеров на одной платформе: например, Firefox и Chrome.

bksit37sdilez14kbsmjrica58e.png


Chrome 91 работает на 23% быстрее благодаря оптимизациям в JavaScript-движке V8. Главная из этих оптимизаций — внедрение нового неоптимизирующего компилятора Sparkplug и кратких встроенных вызовов.

Sparkplug — это новый неоптимизирующий компилятор JavaScript, который в цепочке компиляции V8 занимает место между интерпретатором Ignition и оптимизирующим компилятором TurboFan.

Двухуровневую компиляцию представили в мае 2017 года. Сегодня «двигатель внутреннего сгорания» V8 пополнился третьим элементом.

1ep07aa_zyoh2_95q6ifujl9h08.png

Новый конвейер V8

Sparkplug заполняет пробел между необходимостью быстрого запуска и оптимизацией кода для максимальной производительности. Ignition — это интерпретатор байт-кода, задача которого состоит в том, чтобы начать выполнение JavaScript с как можно меньшей задержкой. TurboFan — оптимизирующий компилятор, который генерирует высокопроизводительный машинный код на основе информации, собранной во время выполнения JavaScript. В результате TurboFan запускается медленнее, чем Ignition.

Sparkplug устанавливает баланс между ними. Он генерирует собственный машинный код, но не зависит от информации, собранной при выполнении кода JavaScript. Это позволяет ему быстро начать выполнение, всё ещё генерируя относительно быстрый код. Полный технический разбор Sparkplug см. в отдельной статье из блога V8.

Ещё одна интересная оптимизация V8 — краткие встроенные вызовы (short builtins). Это механизм, с помощью которого движок V8 оптимизирует расположение в памяти сгенерированного кода. Когда V8 генерирует из JavaScript ассемблер для конкретного процессора, код помещается в память. Этот сгенерированный код часто вызывает встроенные функции — небольшие фрагменты кода для обработки общих подпрограмм, от базовых операций типа добавления переменной до полноценных функций в стандартной библиотеке JavaScript. Для некоторых CPU вызов более далёких функций ведёт к сбою внутренней оптимизации CPU (например, логики прогнозирования ветвления). Программисты Google нашли решение в копировании встроенных функций в ту же область памяти, что и сгенерированный код. Это изменение особенно важно для нового чипа Apple M1.

Улучшение бенчмарков после внедрения кратких встроенных вызовов:

b0928bf1598ceca26565f67cd58ac664.svg


4ec2506382ddaaac03a02f521e7ded6c.svg


О влиянии этой функции на CPU разной архитектуры см. здесь.

Продуктовый менеджер Томас Наттерсад в блоге Chromium подсчитал, что за счёт повышения производительности новая версия Chrome ежедневно экономит своим пользователям более 17 лет процессорных вычислений.


Источник статьи: https://habr.com/ru/company/itsumma/news/t/560234/
 
Сверху