В своей работе мы постоянно используем инструменты, призванные облегчить нам жизнь. Но как хорошо мы ими на самом деле владеем? И почему мы пренебрегаем их суперсилами? Например, Chrome DevTools — это не только отладчик и инспектор HTML. Но когда у нас в руках молоток, кругом мерещатся гвозди. Десятки мегабайт и процентов загрузки процессора на вкладку браузера — верный признак того, что пора учиться пользоваться микроскопом.
Роман предложит освоить что-то посложнее молотка и расскажет о том, какую реальную пользу можно получить от профилирования, как найти в огромном отчёте проблему с кодом и что лучше — написать в коде десяток console.log или async debug.
15. Асинхронные коллстэки
Пробивают сквозь пространство и время
— setInterval
— setTimeout
— XMLHttpRequest
— promises
— requestAnimationFrame
— и т.д, и т.п
15
16. Обычный vs. Async коллстэк
Коллстэк курильщика Коллстэк здорового человека
16
17. Async + breakpoints = ❤
1. Включаем Async call stack
2. Ловим результат бага (DOM, XHR breakpoints)
3. Можем вернуться к истокам проблемы
4. ???
5. Profit
17
33. Recalculate Style
— Собирает все стили
— Находит соответствие между элеметами DOM и селекторами
— Высчитывает Calculated Style для каждого элемента
33
42. Диагностика FPS JavaScript
— CPU Profiler Tree - дает снимок, не дает понимания динамики
— CPU Profiler Chart - лучше, но сложно синхронизировать с Timeline
42
50. Forced synchronous layout Styles
Bad way
Изменяем
размеры A
➔
Invalidate
layout
➔
Получаем
размеры
➔ Layout ➔
Изменяем
размеры B
50
➔ ...
Good way
Получаем
все размеры
➔
Изменяем
все размеры
➔
Invalidate
layout
➔ Layout ➔ ...
57. Диагностика FPS Paint
— Paint Rectangles - показывает, какая область экрана перерисовывается
на каждом кадре.
— Чем реже требуется перерисовка, тем лучше
— Чем меньше область перерисовки, тем лучше
57
63. Так что же всё-таки делать с FPS?
— FPS meter
— Timeline
— JavaScript CPU Profiler / Canary Timeline
— Styles Обращаем внимание на предупреждения
— Paint Paint Rectangles, скрываем подозрительные элементы
63
75. Chrome DevTools помогает
— Отлаживать
— Изучать незнакомый код
— Искать проблемы с производительностью
75
76. Пример из этой презентации
https://github.com/bardt/devtools_training_app
Пул-реквесты приветствуются. Сделаем этот проект еще хуже!
76
77. Если хочется еще deeper
Отладка
77
— Debugging Asynchronous JavaScript with Chrome DevTools - Pearl Chen
— Using the Console
— Breakpoints on JavaScript Event Listeners
78. Если хочется еще deeper
FPS и память
— Advanced performance tooling in Chrome DevTools - Paul Irish
— Parallax Performance [CSSConfUS2014] - Paul Irish
— JavaScript Memory Management - Addy Osmani
— GPU boundedness - Nat Duca
78
79. Firefox
— Debugging with Firefox
— Performance fundamentals
Opera
— Dragonfly documentation
79
80. К чему это все?
— Осваивайте инструменты, упрощающие вам жизнь
— Не растрачивайте время впустую
— Пишите больше фич и получайте от этого кайф
80