67
1

"Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

  • Upload
    yandex

  • View
    2.672

  • Download
    10

Embed Size (px)

DESCRIPTION

Последние несколько лет вопросам производительности веб-страниц уделяется много внимания. Уже давно известно, как можно ускорить загрузку страниц, однако далеко не все разработчики заботятся об этом. При этом сайты с каждым днём становятся все более объёмными и сложными. Существует масса сервисов и утилит, дающих детальную информацию о работе сайта и позволяющих оценить время его загрузки. Но в большинстве случаев эти данные отражают ситуацию на машине разработчика либо соответствуют какому-то условному сценарию: например, можно проводить синтетические тесты с заданной шириной канала и определённым набором браузеров. Узнать реальную картину можно, только получая данные от самих пользователей. Мы поговорим о том, какие возможности существуют для этого, посмотрим на инструменты для сбора такой информации и разберём особенности их работы в разных браузерах.

Citation preview

Page 1: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

1

Page 2: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

2

Когда загрузится страница нам нужно знать наверняка

Карев Иван

Page 3: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

3

Немного о себе

•  В веб-разработке более 6ти лет •  Последние 2 года – главные страницы

Яндекса •  Занимаюсь вопросами производительности

ivan-­‐karev@yandex-­‐team.ru  @newbfg  

Page 4: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

4

О чем будем говорить

•  Время загрузки страницы – общие вопросы, немного истории

•  Наши эксперименты на главной странице – успехи, неудачи, сомнения

•  К чему мы пришли

Page 5: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

5

Почему это важно?

•  Нужно быть уверенным, что все хорошо •  Нужно уметь сравнивать с другими сервисами •  Нужно уметь оценивать изменения (изменение платформы, дизайна, …)

Page 6: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

6

Почему фронтенд?

"backend”  14%   “frontend”  86%  

gLearn  glass  –  Steve  Souders  

Page 7: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

7

Что именно измерять?

Загрузка страницы: •  До 100мс – мгновенно •  До 1с – ожидание… •  Больше 1с – переключение внимания onload

Page 8: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

8

Что именно измерять?

Загрузка страницы: Начало •  До 100мс – мгновенно •  До 1с – ожидание… •  Больше 1с – переключение внимания Окончание onload

Page 9: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

9

Начало визуальных изменений

Page 10: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

10

Задача

•  Узнать время начала визуальных изменений •  в разных браузерах •  с разными сетевыми условиями •  с нужной периодичностью

Page 11: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

11

Инструмент - Шуттилка

•  Время начала/окончания визуальных изменений страницы и ее частей •  Все нужные браузеры •  Гибкая настройка сетевых условий •  Высокая пропускная способность, история запусков •  Горячий/холодный кэш, куки и т.д.

Page 12: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

12

Синтетические тесты

Page 13: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

13

Начало визуальных изменений у пользователей

Page 14: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

14

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

•  Сравним данные Шуттилки и данные, полученные на странице •  Разные браузеры, разные сетевые условия •  Ищем закономерности

Page 15: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

15

Что измерить?

1. Скрипты на странице (end of body – start of head)

Page 16: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

16

Chrome, 20mbit, 20ms

-­‐200  

Шуттилка  

(Шуттилка  -­‐  скрипт)  

Запуски  

Врем

я  

Page 17: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

17

Chrome, 1mbit, 100ms

-­‐3600  

Page 18: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

18

Firefox, 20mbit, 20ms

40  

Page 19: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

19

Firefox, 1mbit, 100ms

-­‐3100  

Page 20: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

20

IE, 20mbit, 20ms

-­‐400  

Page 21: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

21

IE, 1mbit, 100ms

-­‐3800  

Page 22: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

22

Что измерить?

1.  Скрипты на странице (end of body – start of head) + есть корреляция – зависят от сетевых условий – зависят от браузера – погрешность

Page 23: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

23

Что измерить?

1.  Скрипты на странице (end of body – start of head) 2.  Navigation Timing API

Page 24: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

24

Navigation Timing API

Page 25: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

25

performance.timing

navigationStart redirect domainLookup connect request response domInteractive domContentLoaded loadEvent

Page 26: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

26

Navigation Timing API

domContentLoaded – navigationStart?

Page 27: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

27

Chrome, 20mbit, 20ms

-­‐500  

Запуски  

Врем

я  

Page 28: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

28

Chrome, 1mbit, 100ms

-­‐4200  

Page 29: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

29

Firefox, 20mbit, 20ms

-­‐480  

Page 30: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

30

Firefox, 1mbit, 100ms

-­‐4100  

Page 31: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

31

IE, 20mbit, 20ms

-­‐750  

Page 32: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

32

IE, 1mbit, 100ms

-­‐5100  

Page 33: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

33

Что измерить?

1.  Скрипты на странице (end of body – start of head) 2.  Navigation Timing API

+ есть корреляция – зависят от сетевых условий – зависят от браузера – погрешность

Page 34: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

34

Что измерить?

1.  Скрипты на странице (end of body – start of head) 2.  Navigation Timing API 3.  Экспериментальные API

Page 35: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

35

IE9+

performance.timing.msFirstPaint

Page 36: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

36

Chromium’s

chrome.loadTimes().firstPaintTime

Page 37: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

37

Chrome, 20mbit, 20ms

-­‐100  

Запуски  

Врем

я  

Page 38: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

38

Chrome, 1mbit, 100ms

-­‐100  

Page 39: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

39

IE, 20mbit, 20ms

0  

Page 40: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

40

IE, 1mbit, 100ms

0  

Page 41: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

41

И еще

•  Другие сетевые условия •  Горячий/холодный кэш

Page 42: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

42

Проверим на пользователях!

Page 43: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

43

yandex.ru, всё вместе, 50%

Page 44: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

44

Что в итоге

•  Есть способ измерять визуальные изменения у пользователей

Page 45: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

45

Что в итоге

•  Есть способ измерять визуальные изменения у пользователей •  Пока без поддержки в Firefox

Page 46: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

46

Что в итоге

•  Есть способ измерять визуальные изменения у пользователей •  Пока без поддержки в Firefox •  Есть погрешность в chrome.loadTimes()

Page 47: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

47

Погрешность в chrome.loadTimes()

10%   20%   30%   40%   50%   60%   70%   80%  0  

200  

400  

600  

800  

1000  

1200  

1400  

1600  

1800  

Page 48: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

48

Погрешность в chrome.loadTimes(): до

Запуски  

Врем

я  

Page 49: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

49

Погрешность в chrome.loadTimes(): после

30  

Запуски  

Врем

я  

Page 50: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

50

Что в итоге

•  Есть способ измерять визуальные изменения у пользователей •  Пока без поддержки в Firefox •  Есть погрешность в chrome.loadTimes(), исправим •  Opera?

Page 51: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

51

Opera16, 20mbit, 20ms

Шуттилка  

(Шуттилка  -­‐  скрипт)  Запуски  

Врем

я  

Page 52: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

52

Opera16, 1mbit, 100ms

Page 53: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

53

Что в итоге

•  Есть способ измерять визуальные изменения у пользователей •  Пока без поддержки в Firefox •  Есть погрешность в chrome.loadTimes(), исправим •  Неправильные данные в Opera, ждем исправлений

Page 54: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

54

Что в итоге

•  Есть способ измерять визуальные изменения у пользователей •  Пока без поддержки в Firefox •  Есть погрешность в chrome.loadTimes(), исправим •  Неправильные данные в Opera, ждем исправлений •  Мобильные устройства

Page 55: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

55

mobilehtml5.org

Page 56: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

56

yandex.ru, IEMobile, 50%

Page 57: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

57

Что в итоге

•  Есть способ измерять визуальные изменения у пользователей •  Пока без поддержки в Firefox •  Есть погрешность в chrome.loadTimes(), исправим •  Неправильные данные в Opera, ждем исправлений •  Мобильные устройства •  Отчет о времени загрузки страниц в Метрике

Page 58: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

58

Отчет о времени загрузки страниц

Page 59: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

59

Отчет о времени загрузки страниц

Page 60: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

60

Это будет работать, если сайт загружается так, как вы ожидаете.

Page 61: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

61

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

Page 62: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

62

Что дальше?

speedIndex

Page 63: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

63

Бонус

Chrome vs Opera

Page 64: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

64

Chrome vs Opera, 20mbit, 20ms

Запуски  

Врем

я  

Chrome  

Opera  

Page 65: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

65

Chrome vs Opera, 1mbit, 100ms

600ms  

Opera  

Chrome  

Запуски  

Врем

я  

Page 66: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

66

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

[email protected]

Page 67: "Когда загрузится страница нам нужно знать наверняка". Иван Карев, Яндекс

67

Спасибо за внимание