67
Я.Субботник, Киев, 28 мая 2011 года Разработчик интерфейсов Корепанов Михаил Cкорость рендеринга страниц: исследования, замеры, автоматизация

Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

  • Upload
    yandex

  • View
    2.294

  • Download
    3

Embed Size (px)

DESCRIPTION

28 мая 2011, Я.Субботник в Киеве Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация" О докладе: В докладе подробно разобрано, что влияет на скорость отрисовки страниц, как ее измерить и как оптимизировать, включая вопрос автоматизации процесса тестирования скорости отрисовки в разных браузерах. Действительно ли нужно уделять время оптимизации скорости рендеринга страниц или достаточно оптимизировать только скорость загрузки? Что такое reflow и repaint и как это влияет на время отрисовки страниц? Что использовать для измерения времени reflow и repaint? Как автоматизировать процесс тестирования скорости рендеринга страниц в большом количестве браузеров?

Citation preview

Page 1: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Я.Субботник,  Киев,  28  мая  2011  года�

Разработчик  интерфейсовКорепанов  Михаил

Cкорость  рендеринга  страниц:исследования,  замеры,  автоматизация

Page 2: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Почему?

1

Page 3: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

GMail

Google Reader

Яндекс.Почта

NetVibes

280 Slides

Google Docs

Mockingbird

Twitter

2

Page 4: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Веб уже не тот…3

Page 5: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Веб-приложения4

Page 6: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Веб-приложения

• Все взаимодействие на клиенте• Много JS• Частое обращение к DOM

• Частый reflow/repaint

5

Page 7: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Это так важно?

6

Page 8: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Да!

7

Page 9: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Reflow — процесс вычисления размерови положения элементов на странице

8

Page 10: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Repaint — процесс отрисовки визуального отображения элементов

9

Page 11: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Как измерить?

10

Page 12: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Браузерные инструментыWeb Inspector

Page 13: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Браузерные инструментыSpeed Tracer

Page 14: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Браузерные инструментыDynaTrace Ajax Edition

Page 15: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Браузерные инструментыFirebug + Paint Events

14

Page 16: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Браузерные инструменты

— ?

15

Page 17: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Кроссбраузерно

16

Page 18: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Букмарклет

17

Page 19: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

18

Page 20: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Область перерисовки

• --show-paint-rects

19

Page 21: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Область перерисовки

• --show-paint-rects

• --show-composited-layer-borders

20

Page 22: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Область перерисовки

• --show-paint-rects

• --show-composited-layer-borders

• CA_COLOR_OPAQUE=1

21

Page 23: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Область перерисовки

• --show-paint-rects

• --show-composited-layer-borders

• CA_COLOR_OPAQUE=1

• CA_COLOR_FLUSH=1

22

Page 24: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Область перерисовки

• --show-paint-rects

• --show-composited-layer-borders

• CA_COLOR_OPAQUE=1

• CA_COLOR_FLUSH=1

• MozAfterPaint Event

23

Page 25: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

24

Page 26: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Время перерисовки

• Смотреть в инструментах

25

Page 27: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Время перерисовки

• Смотреть в инструментах• Мерять FPS при анимации

26

Page 28: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Время перерисовки

• Смотреть в инструментах• Мерять FPS при анимации

• Мерять время скролла

27

Page 29: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Что влияет?

• Много DOM элементов

28

Page 30: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Что влияет?

• Много DOM элементов

• Большая вложенность

29

Page 31: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Что влияет?

• Много DOM элементов

• Большая вложенность• Много селекторов в таблице стилей

30

Page 32: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Что влияет?

• Много DOM элементов

• Большая вложенность• Много селекторов в таблице стилей• Медленные селекторы

31

Page 33: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Что влияет?

• Много DOM элементов

• Большая вложенность• Много селекторов в таблице стилей• Медленные селекторы• Новомодные CSS3 свойства

32

Page 34: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Что влияет?

• Много DOM элементов

• Большая вложенность• Много селекторов в таблице стилей• Медленные селекторы• Новомодные CSS3 свойства

• float для лейаута и таблицы без table-layout: fixed

33

Page 35: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

СелекторыВсе на абсолютно-независимых блоках

.b-some-block ul li

.b-some-block__item

34

Page 36: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Селекторы

Как можно меньше каскада

.b-some-block .b-another-block .b-link

.b-some-block_with-link .b-link

35

Page 37: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

СелекторыСелекторыПсевдоселекторы быстрее с указанием имени элемента

:link, :visited, :nth-child(2)

a:link, a:visited, div:nth-child(2)

36

Page 38: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

СелекторыСелекторы

:hover → a:hover (тормоза в IE7-)

.b-link:hover

a.b-link:hover

37

Page 39: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Селекторы

• CSS3 селекторы тормозят (3-10 раз по сравнению с селектором класса)

• Псевдоэлементы такие же, как и обычные

38

Page 40: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Свойства

• position: fixed (IE8-)

39

Page 41: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

• position: relative + отрицательный margin (IE7-)

Свойства

• position: fixed (IE8-)

40

Page 42: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Свойства

• position: relative + отрицательный margin (IE7-)

• position: fixed (IE8-)

• position: absolute без координат позиционирования (IE7)

41

Page 43: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

СвойстваСвойства

• position: relative + отрицательный margin (IE7-)

• position: fixed (IE8-)

• position: absolute без координат позиционирования (IE7)

• Картинки через background (IE8-)

42

Page 44: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Свойства

• position: relative + отрицательный margin (IE7-)

• position: fixed (IE8-)

• position: absolute без координат позиционирования (IE7)

• Картинки через background (IE8-)

• word-spacing/letter-spacing: 0 на :hover (IE8)

43

Page 45: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

CSS3• box-shadow + inset и большой (>=15px) радиус (WebKit)

44

Page 46: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

CSS3

• border-radius (IE9 если много детей)

• box-shadow + inset и большой (>=15px) радиус (WebKit)

45

Page 47: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

CSS3

• border-radius (IE9 если много детей)

• box-shadow + inset и большой (>=15px) радиус (WebKit)

• Радиальные градиенты (WebKit)

46

Page 48: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

CSS3

• border-radius (IE9 если много детей)

• box-shadow + inset и большой (>=15px) радиус (WebKit)

• Радиальные градиенты (WebKit)

• background-size (WebKit)

47

Page 49: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Картинки• Лучше не растягивать (скорость репейнта падает в ~2 раза)

48

Page 50: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Картинки• Лучше не растягивать (скорость репейнта падает в ~2 раза)

• Не важно, где указан размер, если он верный

49

Page 51: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Картинки• Лучше не растягивать (скорость репейнта падает в ~2 раза)

• Не важно, где указан размер, если он верный• Картинки в спрайте в ~1,5-2 раза медленне (IE6)

50

Page 52: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Картинки• Лучше не растягивать (скорость репейнта падает в ~2 раза)

• Не важно, где указан размер, если он верный• Картинки в спрайте в ~1,5-2 раза медленне (IE6)

• data:uri и mhtml в ~3-4 раза медленне, чем обычные (IE8-)

51

Page 53: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

IE8/8 в 2-3 раза медленнее IE8/752

Page 54: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Аппаратное ускорение?

• Есть не везде (Chrome, Safari 5, FF4, Opera 11.50, IE9)

53

Page 55: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Аппаратное ускорение?

• Применяется не ко всему (анимация, SVG, Canvas)

• Есть не везде (Chrome, Safari 5, FF4, Opera 11.50, IE9)

54

Page 56: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Аппаратное ускорение?

• Применяется не ко всему (анимация, SVG, Canvas)

• Можно включить в Safari: -webkit-transform: translateZ(0)

• Есть не везде (Chrome, Safari 5, FF4, Opera 11.50, IE9)

55

Page 57: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Меньше reflow

• Кэшировать результат• Меньше обращений к DOM в onscroll

56

Page 58: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Меньше reflowВставка в DOM

57

Page 59: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Меньше reflowDocumentFragment

58

Page 60: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Меньше reflowinnerHTML

59

Page 61: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Меньше reflowСначала получать значения, потом — менять

60

Page 62: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Меньше reflowИспользовать setTimeout и postMessage

Page 63: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Меньше reflowСкрывать элементы перед изменениями

62

Page 64: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Автоматизация

Selenium

Python

ReflowTimer63

Page 65: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Автоматизация

• Букмарклет для ReflowTimer (http://yandex.st/jslibs/_rt.js)

• Selenium 2 + Python + ReflowTimer (http://github.com/panya/reflow-tests)

64

Page 66: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

Вопросы?

65

Page 67: Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автоматизация"

разработчик  интерфейсов

panyakor@yandex-­‐team.ru

Корепанов  Михаил