100
Суперсилы Chrome Developer Tools Роман Сальников 1

Суперсилы Chrome developer tools

  • Upload
    2-

  • View
    1.327

  • Download
    6

Embed Size (px)

DESCRIPTION

В своей работе мы постоянно используем инструменты, призванные облегчить нам жизнь. Но как хорошо мы ими на самом деле владеем? И почему мы пренебрегаем их суперсилами? Например, Chrome DevTools — это не только отладчик и инспектор HTML. Но когда у нас в руках молоток, кругом мерещатся гвозди. Десятки мегабайт и процентов загрузки процессора на вкладку браузера — верный признак того, что пора учиться пользоваться микроскопом. Роман предложит освоить что-то посложнее молотка и расскажет о том, какую реальную пользу можно получить от профилирования, как найти в огромном отчёте проблему с кодом и что лучше — написать в коде десяток console.log или async debug.

Citation preview

Page 1: Суперсилы Chrome developer tools

Суперсилы Chrome Developer Tools

Роман Сальников

1

Page 2: Суперсилы Chrome developer tools
Page 3: Суперсилы Chrome developer tools

Код проекта – черный ящик

События ➔

?➔ Отрисовка

Внешние API ➔ ➔ Данные

Время ➔ ➔ Внешние API

3

Page 4: Суперсилы Chrome developer tools

4

Page 5: Суперсилы Chrome developer tools

DevTools обывателя и профессионала

5

Page 6: Суперсилы Chrome developer tools
Page 7: Суперсилы Chrome developer tools
Page 8: Суперсилы Chrome developer tools

Тренировочная площадка

6

Page 9: Суперсилы Chrome developer tools
Page 10: Суперсилы Chrome developer tools

1. Отладка

Page 11: Суперсилы Chrome developer tools

Баг – элемент добавляется дважды

8

Page 12: Суперсилы Chrome developer tools
Page 13: Суперсилы Chrome developer tools

Хардкорная обычная отладка1. Ищем по проекту что-то похожее

2. Читаем код

3. Ставим console.log и/или брэйкпоинт

4. Повторяем

9

Page 14: Суперсилы Chrome developer tools

Есть кое-что

мощнее

Page 15: Суперсилы Chrome developer tools

Умные брэйкпоинты— Изменения DOM

— XHR запросы

— Event Listeners

— Workers

11

Page 16: Суперсилы Chrome developer tools

Event Listeners

12

Page 17: Суперсилы Chrome developer tools
Page 18: Суперсилы Chrome developer tools

DOM Breakpoints

13

Page 19: Суперсилы Chrome developer tools
Page 20: Суперсилы Chrome developer tools

Асинхронные коллстэкиПробивают сквозь пространство и время

— setInterval

— setTimeout

— XMLHttpRequest

— promises

— requestAnimationFrame

— и т.д, и т.п

14

Page 21: Суперсилы Chrome developer tools

Обычный vs. Async коллстэкКоллстэк курильщика Коллстэк здорового человека

15

Page 22: Суперсилы Chrome developer tools

Async + Breakpoints = ❤1. Включаем Async Call Stack

2. Ловим результат бага (DOM, XHR Breakpoints)

3. Можем вернуться к истокам проблемы

4. ???

5. Profit

16

Page 23: Суперсилы Chrome developer tools
Page 24: Суперсилы Chrome developer tools
Page 25: Суперсилы Chrome developer tools

Console

Page 26: Суперсилы Chrome developer tools

$0 + getEventListeners

18

Page 27: Суперсилы Chrome developer tools
Page 28: Суперсилы Chrome developer tools
Page 29: Суперсилы Chrome developer tools

Отладка объектов JavaScript

19

Page 30: Суперсилы Chrome developer tools

var watchMe = {};

Object.observe(watchMe, function() {

debugger;

});

watchMe.foo = 'bar'; // выполнение останавливается

01.

02.

03.

04.

05.

06.

20

Page 31: Суперсилы Chrome developer tools

Snippets

21

Page 32: Суперсилы Chrome developer tools
Page 33: Суперсилы Chrome developer tools

Инструменты для отладки— Умные брэйкпоинты

— Async Call Stack

— Console API

22

Page 34: Суперсилы Chrome developer tools

2. FPS

Page 35: Суперсилы Chrome developer tools

Страница заметно

тормозит

Page 36: Суперсилы Chrome developer tools

FPS meter

25

Page 37: Суперсилы Chrome developer tools
Page 38: Суперсилы Chrome developer tools

Timeline

26

Page 39: Суперсилы Chrome developer tools
Page 40: Суперсилы Chrome developer tools
Page 41: Суперсилы Chrome developer tools
Page 42: Суперсилы Chrome developer tools

Timeline— JavaScript

— Recalculate Style , Layout

— Paint

27

Page 43: Суперсилы Chrome developer tools

Recalculate Style— Собирает все стили

— Находит соответствие между элеметами DOM и селекторами

— Высчитывает Calculated Style для каждого элемента

28

Page 44: Суперсилы Chrome developer tools

Layout— Высчитывает геометрии элементов на основе стилей

29

Page 45: Суперсилы Chrome developer tools

Paint— Преобразует все, что было подсчитано, в пиксели

— Отрисовывает на экране

30

Page 46: Суперсилы Chrome developer tools
Page 47: Суперсилы Chrome developer tools

31

Page 48: Суперсилы Chrome developer tools

CPU profiler

32

Page 49: Суперсилы Chrome developer tools
Page 50: Суперсилы Chrome developer tools
Page 51: Суперсилы Chrome developer tools
Page 52: Суперсилы Chrome developer tools
Page 53: Суперсилы Chrome developer tools

Диагностика FPS JavaScript— CPU Profiler Tree – дает снимок, не дает понимания динамики

— CPU Profiler Chart – лучше, но сложно синхронизировать с Timeline

33

Page 54: Суперсилы Chrome developer tools

34

Page 55: Суперсилы Chrome developer tools

Прокачанный Timeline— Включить режим экспериментов DevTools в chrome://flags

— Включить дополнительные настройки

— Наслаждаться результатом

35

Page 56: Суперсилы Chrome developer tools
Page 57: Суперсилы Chrome developer tools
Page 58: Суперсилы Chrome developer tools
Page 59: Суперсилы Chrome developer tools
Page 60: Суперсилы Chrome developer tools

Диагностика FPS Styles

36

Page 61: Суперсилы Chrome developer tools

Диагностика FPS Styles

37

Page 62: Суперсилы Chrome developer tools

Forced synchronous layout StylesBad way

Изменяемразмеры A

➔Invalidate

layout➔

Получаемразмеры

➔ Layout ➔Изменяемразмеры B

➔ . . .

Good way

Получаемвсе размеры

➔Изменяем

все размеры➔

Invalidatelayout

➔ Layout ➔ . . .

38

Page 63: Суперсилы Chrome developer tools

Мы поняли— updateHeaderPosition – корень всех проблем

— Из нее вызывается много тяжелого кода jQuery

— Есть проблема с инвалидацией лэйаута

39

Page 64: Суперсилы Chrome developer tools

function getHeaderOffset() {

return $(window).scrollTop()

- $('#pageHeader').offset().top;

}

01.

02.

03.

04.

40

Page 65: Суперсилы Chrome developer tools

// updateHeaderPosition

$('#pageHeaderText').css({

top: headerHeight/2 - (getHeaderOffset() / 2)

});

...

$('.letter').animate({

paddingLeft: getHeaderOffset() / 10,

paddingRight: getHeaderOffset() / 10

}, 0);

01.

02.

03.

04.

05.

06.

07.

08.

09.

41

Page 66: Суперсилы Chrome developer tools

var headerOffset = getHeaderOffset();

var destPadding = headerOffset / 10;

...

$('#pageHeaderText').css({

top: headerHeight/2 - (headerOffset / 2)

});

$('.letter').css({

paddingLeft: destPadding,

paddingRight: destPadding

});

01.

02.

03.

04.

05.

06.

07.

08.

09.

10.

42

Page 67: Суперсилы Chrome developer tools

После исправления анимации

43

Page 68: Суперсилы Chrome developer tools
Page 69: Суперсилы Chrome developer tools

Диагностика FPS Paint— Paint Rectangles – показывает, какая область экрана перерисовывается

на каждом кадре.

— Чем реже требуется перерисовка, тем лучше

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

44

Page 70: Суперсилы Chrome developer tools
Page 71: Суперсилы Chrome developer tools

Решение проблемы с перерисовкой

45

Page 72: Суперсилы Chrome developer tools
Page 73: Суперсилы Chrome developer tools
Page 74: Суперсилы Chrome developer tools

Timeline после всех изменений

46

Page 75: Суперсилы Chrome developer tools
Page 76: Суперсилы Chrome developer tools

Так что же всё-таки делать с FPS?— Убедиться, что есть проблема, с помощью FPS meter

— Записать активность в Timeline

— JavaScript CPU Profiler / Canary Timeline

— Styles Обращать внимание на предупреждения

— Paint Paint Rectangles, скрыть подозрительные элементы

47

Page 77: Суперсилы Chrome developer tools

3. Память

Page 78: Суперсилы Chrome developer tools
Page 79: Суперсилы Chrome developer tools

Timeline показывает память

50

Page 80: Суперсилы Chrome developer tools
Page 81: Суперсилы Chrome developer tools
Page 82: Суперсилы Chrome developer tools

Heap Snapshots

51

Page 83: Суперсилы Chrome developer tools
Page 84: Суперсилы Chrome developer tools
Page 85: Суперсилы Chrome developer tools
Page 86: Суперсилы Chrome developer tools

Detached Nodes

52

Page 87: Суперсилы Chrome developer tools
Page 88: Суперсилы Chrome developer tools
Page 89: Суперсилы Chrome developer tools

После устранения проблемы

53

Page 90: Суперсилы Chrome developer tools
Page 91: Суперсилы Chrome developer tools

Память— Изолируем проблему

— Проверяем с помощью Timeline (forced GC)

— Определяем, что искать

— Сравниваем до/после через Heap Snapshots

54

Page 92: Суперсилы Chrome developer tools

4. Итоги

Page 93: Суперсилы Chrome developer tools

Chrome DevTools помогает— Отлаживать

— Изучать незнакомый код

— Искать проблемы с производительностью

56

Page 94: Суперсилы Chrome developer tools

Пример из этой презентацииhttps://github.com/bardt/devtools_training_app

Пул-реквесты приветствуются. Сделаем этот проект еще хуже!

57

Page 95: Суперсилы Chrome developer tools

Если хочется еще deeperОтладка

— Debugging Asynchronous JavaScript with Chrome DevTools – Pearl Chen

— Using the Console

— Breakpoints on JavaScript Event Listeners

58

Page 96: Суперсилы Chrome developer tools

Если хочется еще deeperFPS и память

— Advanced Performance Tooling in Chrome DevTools – Paul Irish

— Parallax Performance [CSSConfUS2014] – Paul Irish

— JavaScript Memory Management – Addy Osmani

— GPU Boundedness – Nat Duca

59

Page 98: Суперсилы Chrome developer tools

К чему это все?— Осваивайте инструменты, упрощающие вам жизнь

— Не растрачивайте время впустую

— Пишите больше фич и получайте от этого кайф

61

Page 99: Суперсилы Chrome developer tools

Спасибо!

Page 100: Суперсилы Chrome developer tools

Суперсилы Chrome Developer Tools

Роман Сальников

[email protected]

techno.2gis.ru

63