В Chromium 33 добавили параллельную компиляцию скриптов

Страшный заголовок, который одним своим видом отпугивает половину читателей. Но в результате этого изменения самые обычные пользователи получат более плавную работу сайтов и веб-приложений, поэтому эту заметку стоит прочитать.

Каждый пользователь Хрома, читающий хром.рф, знает, что за компиляцию JavaScript в браузере отвечает движок V8. Исторически сложилось так, что работа эта ведется им в основном потоке, а это влияет на производительность веб-приложений. В Chromium 33 добавили параллельную компиляцию, которая позволяет большую часть этапа оптимизации вынести в фоновый поток. В результате сервисы начинают работать без подвисаний, а пользователи становятся счастливыми и делятся ссылками на статью в социальных сетях.

А теперь еще немного умных слов про то, как это все волшебно работает. Чтобы добиться максимальной производительности, V8 первичную компиляцию скриптов проводит максимально быстрым способом. При этом про оптимизацию кода никто не думает — главное получить быстрый результат. Но те части кода, которые исполняются достаточно часто, проходят второй этап компиляции, который уже сфокусирован на его оптимизации. Работает это относительно долго, используются продвинутые технологии, но в результате имеем хорошо оптимизированный шустрый код.

Раньше в V8 этапы компиляции оптимизированного кода и его исполнения работали по очереди. Для больших кусков кода и сложных проектов (например, игры) это было очень критично, т.к. могло приводить к тормозам, выпадению кадров, непроизвольному мату геймеров. Параллельная компиляция решает эту проблему.

Посмотрим на то, как работает V8 в одном из живых примеров. На картинках представлена часть реального процесса работы теста Mandreel из бенчмарка Octane. Черная полоса это исполнение JavaScript. В идеале она должна быть непрерывной и белой.

Но на практике исполнение подвисло на 600мс по причине того, что основной поток был занят оптимизацией. Оптимизация, которая приводит к таким тормозам это не оптимизация, а трагедия какая-то. К счастью, кто-то придумал параллельную компиляцию, которая выносит оптимизацию в фоновый поток. И получается новая красивая картинка:

Что это дало? Это увеличило на 27% количество попугаев в тесте Mandreel. А с точки зрения пользователя повысило плавность работы веб-приложения. Вот такие вот чудеса творятся в 33 версии Хрома, а вы до сих пор не установили наше расширение.

 

1 star2 star3 star4 star5 star (ОЦЕНИТЬ!)
Загрузка...
Прочее
Комментировать!

Автор: Mikhail Malinin

Родился 14 мая 1984 года в городе Уайт-Плейнс (штат Нью-Йорк), что в нескольких километрах к северу от города Нью-Йорка, в еврейской семье. Отец — стоматолог Эдвард Цукерберг (по состоянию на 2012 год продолжал практику). Мать — психиатр Карен Цукерберг. Был вторым ребёнком и единственным мальчиком из 4 детей в семье; его сёстры — Рэнди (старшая), Донна и Ариэль.