В своей работе мы постоянно используем инструменты, призванные облегчить нам жизнь. Но как хорошо мы ими на самом деле владеем? И почему мы пренебрегаем их суперсилами? Например, Chrome DevTools — это не только отладчик и инспектор HTML. Но когда у нас в руках молоток, кругом мерещатся гвозди. Десятки мегабайт и процентов загрузки процессора на вкладку браузера — верный признак того, что пора учиться пользоваться микроскопом.
Роман предложит освоить что-то посложнее молотка и расскажет о том, какую реальную пользу можно получить от профилирования, как найти в огромном отчёте проблему с кодом и что лучше — написать в коде десяток console.log или async debug.
20. Асинхронные коллстэки
Пробивают сквозь пространство и время
— setInterval
— setTimeout
— XMLHttpRequest
— promises
— requestAnimationFrame
— и т.д, и т.п
14
43. Recalculate Style
— Собирает все стили
— Находит соответствие между элеметами DOM и селекторами
— Высчитывает Calculated Style для каждого элемента
28
53. Диагностика FPS JavaScript
— CPU Profiler Tree – дает снимок, не дает понимания динамики
— CPU Profiler Chart – лучше, но сложно синхронизировать с Timeline
33
62. Forced synchronous layout Styles
Bad way
Изменяем
размеры A
➔
Invalidate
layout
➔
Получаем
размеры
➔ Layout ➔
Изменяем
размеры B
➔ ...
Good way
Получаем
все размеры
➔
Изменяем
все размеры
➔
Invalidate
layout
➔ Layout ➔ ...
38
63. Мы поняли
— updateHeaderPosition – корень всех проблем
— Из нее вызывается много тяжелого кода jQuery
— Есть проблема с инвалидацией лэйаута
39
69. Диагностика FPS Paint
— Paint Rectangles – показывает, какая область экрана перерисовывается
на каждом кадре.
— Чем реже требуется перерисовка, тем лучше
— Чем меньше область перерисовки, тем лучше
44
76. Так что же всё-таки делать с FPS?
— Убедиться, что есть проблема, с помощью FPS meter
— Записать активность в Timeline
— JavaScript CPU Profiler / Canary Timeline
— Styles Обращать внимание на предупреждения
— Paint Paint Rectangles, скрыть подозрительные элементы
47
93. Chrome DevTools помогает
— Отлаживать
— Изучать незнакомый код
— Искать проблемы с производительностью
56
94. Пример из этой презентации
https://github.com/bardt/devtools_training_app
Пул-реквесты приветствуются. Сделаем этот проект еще хуже!
57
95. Если хочется еще deeper
Отладка
— Debugging Asynchronous JavaScript with Chrome DevTools – Pearl Chen
— Using the Console
— Breakpoints on JavaScript Event Listeners
58
96. Если хочется еще deeper
FPS и память
— Advanced Performance Tooling in Chrome DevTools – Paul Irish
— Parallax Performance [CSSConfUS2014] – Paul Irish
— JavaScript Memory Management – Addy Osmani
— GPU Boundedness – Nat Duca
59