Профилирование веб-инспектора с помощью Frames: поиск причин проблем с производительностью, когда на временной шкале ничего не отображается

Я только что посмотрел сеанс Google I/O Jank Busters: создание эффективных веб-приложений, где докладчики объяснили, как использовать новый вид «Кадры» на временной шкале веб-инспектора Chrome.

Вот пример записи, которую я получил при прокрутке страницы, которую я разрабатываю:

инструменты разработки

Как вы можете видеть, в некоторых кадрах есть огромные задержки, но без какой-либо очевидной причины на временной шкале (между желтыми событиями «Timer Fired» есть большие промежутки). Как я могу устранить проблемы с производительностью, чтобы постоянно увеличивать частоту кадров?


person Sophie Alpert    schedule 10.07.2012    source источник
comment
Какая версия Хрома? У меня 20.0.1132.57, и я не вижу раздел кадров на вкладке «Временная шкала».   -  person Mark    schedule 16.07.2012
comment
Прямо сейчас я на 22 (канал разработчиков). Не уверен, что в 21.   -  person Sophie Alpert    schedule 16.07.2012


Ответы (2)


Ваш пример на самом деле выглядит не так уж плохо. Ваш код работает быстро, и браузер будет рендерить только со скоростью 60 кадров в секунду, поэтому он тратит немного времени (до 16 мс) на ожидание следующего цикла рендеринга.

Вот особенно тревожный снимок из представления Кадры на панели Временная шкала инструментов разработчика Chrome.

Согласно документации:

  • Серые области указывают на действия, которые не были инструментированы DevTools, и команда Chrome работает над тем, чтобы эта область была как можно меньше.
  • Чистые области указывают на время простоя между циклами обновления дисплея, что обычно не является проблемой, особенно если область достигает линии 60 кадров в секунду, так как это просто Chrome, ожидающий доставки кадра на вертикальную синхронизацию монитора.

Исчезающе маленькие желтые и зеленые области в нижней части столбцов указывают на то, что обработка событий, рисование и компоновка выполнялись довольно быстро — достаточно быстро, чтобы попасть под горизонтальную линию, указывающую порог 30 кадров в секунду, и, вероятно, быстрее порога 60 кадров в секунду в большинстве случаев. время (линия не показана).

Чтобы узнать больше, откройте параметры инструментов разработчика и проверьте:

Если эта функция включена, вы увидите серые области на панели «ЗАПИСИ»:

Каждая серая область показывает периоды, в течение которых поток рендерера был занят. Если вы видите много пробелов, вероятно, браузер был привязан к GPU.

Нат Дука, инженер Chrome, предоставляет дополнительную информацию в этом сообщении:

Ограниченность графического процессора обычно возникает из-за двух вещей:

  1. наличие -webkit-filter сохраняет 3D-свойства элементов. Те разъедают GPU, как... гм, что-то голодное.
  2. слишком много больших слоев.

Слои? «Показать границы композитного слоя», чтобы увидеть их. Проблемы у большинства людей возникают не из-за количества слоев, а из-за площади слоев.

Эмпирическое правило: большинство компьютеров спроектированы таким образом, что они могут касаться каждого пикселя на главном экране примерно 4 раза. В качестве действительно простого примера, 2-летний MacBook Air рассчитан на размер своего ЖК-дисплея. Когда вы подключаете 30-дюймовый монитор, который имеет более одного слоя, он начинает привязываться к графическому процессору.

Почему это важно? [Ручное движение] слой касается пикселя один раз, когда мы рисуем экран. Если слой имеет размер вашего окна, например. у вас есть ширина = 100% высота = 100% div с -webkit-transform: translateZ (0), тогда вы касаетесь каждого пикселя экрана один раз. Итак, подсчитайте площадь ваших слоев, и если вы превысите в 4 раза площадь вашего монитора, вы не сможете отправиться в космос [потому что вы привязаны к графическому процессору].

Хорошим тестом на ограниченность графического процессора является уменьшение размера окна на 1/2 в каждом измерении. Если все остается медленным, то происходит что-то еще... если все становится быстрее, вы, вероятно, нагружаете графический процессор.

В моем случае (показанном на самой верхней картинке) я все еще пытаюсь выяснить, что вызывает серые полосы. Код не изменился, и производительность была отличной. Возможно, более новая сборка Chrome (сегодня я использую 31.0.1650.57 m) по какой-то причине не работает с этим кодом. Опять же, серые области указывают на то, что поток рендеринга был занят неинструментальным кодом, поэтому трудно сказать, что происходит.

person Drew Noakes    schedule 27.11.2013
comment
Как это явление будет выглядеть в новом пользовательском интерфейсе временной шкалы инструментов ChromeDev (без представления «Кадры»)? Может ли это привести к тому, что requestAnimationFrame последовательно вызывается прямо перед окончанием рамка? Я тоже начал думать, что привязан к графическому процессору, но вижу такое поведение на разных машинах/ОС. - person Stanislaw Osinski; 23.04.2016

Я рекомендую вам использовать http://pagespeed.googlelabs.com.

В основном он покажет вам полную информацию о том, что произошло, когда страница загружалась, чтобы вы знали, над чем работать... (и я также думаю, что в некоторых случаях может пропустить определенную информацию)

Кроме того, вы должны выполнить профилирование памяти страницы, чтобы увидеть, сколько времени требуется некоторым объектам для загрузки в память.

person Chibueze Opata    schedule 24.07.2012
comment
Я немного использовал Page Speed ​​— мне кажется, что Chrome постепенно интегрирует все функции Page Speed ​​непосредственно в Web Inspector. Расширение полезно, но я не думаю, что оно дает больше информации об этом конкретном случае. - person Sophie Alpert; 25.07.2012
comment
Скорость загрузки страницы велика, но она больше ориентирована на быструю загрузку страницы, тогда как показанная выше временная шкала относится к операциям, которые происходят во время работы страницы, возможно, в ответ на пользовательские события или таймеры анимации. - person Drew Noakes; 27.11.2013