Запуск DevTools теперь происходит примерно на 13% быстрее 🎉 (с 11,2 до 10 с).
ТЛ;ДР; Результат достигается за счет удаления избыточной сериализации.
Обзор
Пока DevTools запускается, ему необходимо выполнить несколько вызовов движка JavaScript V8 .
Механизм, который Chromium использует для отправки команд DevTools в V8 (и для IPC в целом), называется mojo
. Мои товарищи по команде Бенедикт Мейрер и Сигурд Шнайдер обнаружили неэффективность во время работы над другой задачей и предложили улучшить процесс, удалив два лишних шага в отправке и получении этих сообщений.
Давайте углубимся в то, как работает механизм mojo
!
Механизмы mojo
Существует команда mojo EvaluateScript
, которая запускает команду JS. Он сериализует всю команду JS, включая arguments
в строку исходного кода JavaScript, которая может быть eval()
. Как вы можете себе представить, эти струны могут стать довольно длинными и дорогими. После того, как команда получена V8, эти строки кода JavaScript десериализуются перед запуском. Этот процесс сериализации и десериализации каждого отдельного сообщения создает значительные накладные расходы.
Бенедикт Мейрер понял, что сериализация и десериализация arguments
довольно затратны и что все шаги «Сериализация команды JS в строку JS» и «Десериализация строки JS» являются избыточными и их можно пропустить.
Технические подробности: RenderFrameHostImpl::ExecuteJavaScript
Как мы улучшились
Мы представили еще один API-метод Mojo, который позволяет нам напрямую передавать имя объекта, вызываемый метод и список аргументов, вместо того, чтобы создавать строку исходного кода JavaScript. Это позволяет нам пропустить сериализацию и десериализацию и устраняет необходимость анализа кода JavaScript.
Технические подробности о том, как мы реализовали эту оптимизацию, можно найти в этих двух патчах:
- CL 2431864: [devtools] Снижение затрат на производительность при отправке сообщений во внешнем интерфейсе.
- CL 2442012: [devtools] Используйте
ExecuteJavaScriptMethod
в DevTools
Влияние
Чтобы оценить эффективность изменения, мы провели несколько измерений, сравнив версии Chromium cb971089a058 и 4f213b39d581 (до и после изменения).
Для обеих редакций мы запускали следующий сценарий 5 раз:
- Запишите трассировку, используя
chrome://tracing
- Откройте DevTools-on-DevTools.
- Получите записанную трассировку
CrRendererMain
и сравните метрики, специфичные для V8.
Судя по этим экспериментам, DevTools открывается примерно на 13% быстрее (с 11,2 до 10 с) благодаря оптимизации.
Основные моменты, продолжительность процессора
Имя метода | Не оптимизировано (мс) | Оптимизировано (мс) | Различия (мс) | Улучшение скорости (%) |
Общий | 11 213,19 | 9 953,99 | -1259,20 | 12,65% |
v8.run | 499,67 | 3,61 | -496,06 | 12,65% |
V8.Выполнить | 1654,87 | 1349,61 | -305,25 | 3,07% |
v8.callFunction | 1171,84 | 1339,77 | 167,94 | -1,69% |
v8.компилировать | 133,93 | 3,56 | -130,37 | 1,31% |
Полная сравнительная таблица показателей трассировки
В результате DevTools открывается и работает быстрее с меньшим использованием ЦП . 🎉
Загрузите предварительный просмотр каналов
Рассмотрите возможность использования Chrome Canary , Dev или Beta в качестве браузера для разработки по умолчанию. Эти каналы предварительного просмотра предоставляют вам доступ к новейшим функциям DevTools, позволяют тестировать передовые API-интерфейсы веб-платформы и помогают находить проблемы на вашем сайте раньше, чем это сделают ваши пользователи!
Свяжитесь с командой Chrome DevTools
Используйте следующие параметры, чтобы обсудить новые функции, обновления или что-либо еще, связанное с DevTools.
- Отправляйте нам отзывы и запросы на добавление новых функций на crbug.com .
- Сообщите о проблеме DevTools, используя Дополнительные параметры > Справка > Сообщить о проблеме DevTools в DevTools.
- Напишите в Твиттере @ChromeDevTools .
- Оставляйте комментарии к видеороликам YouTube «Что нового в DevTools» или «Советы разработчика» на YouTube .