Иван Карев — Клиентская оптимизация

49

Upload: yandex

Post on 21-Dec-2014

1.173 views

Category:

Technology


1 download

DESCRIPTION

В лекции мы попробуем взглянуть на страницу глазами пользователей и понять, что можно сделать для ускорения ее загрузки. Рассмотрим основные оптимизации на стороне браузера, познакомимся с инструментами для измерения времени отображения.

TRANSCRIPT

Page 1: Иван Карев — Клиентская оптимизация
Page 2: Иван Карев — Клиентская оптимизация

Клиентская оптимизация

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

Page 3: Иван Карев — Клиентская оптимизация
Page 4: Иван Карев — Клиентская оптимизация
Page 5: Иван Карев — Клиентская оптимизация

Время — деньги

http://radar.oreilly.com/2009/06/bing-and-google-agree-slow-pag.html

Page 6: Иван Карев — Клиентская оптимизация

6

Что делать?

• Использовать чужой опыт

Page 7: Иван Карев — Клиентская оптимизация

7

Что делать?

• Использовать чужой опыт • Придумать что-то свое

Page 8: Иван Карев — Клиентская оптимизация

8

Время отображения

Первый  байт   Браузер  

Page 9: Иван Карев — Клиентская оптимизация

9

Интернет бывает разный

• У пользователя он всегда хуже, чем у разработчика

Page 10: Иван Карев — Клиентская оптимизация

10

Интернет бывает разный

• У пользователя он всегда хуже, чем у разработчика

• Региональная удаленность 0.371/0.199 (MSK) - 0.627/0.576 (USA)

Page 11: Иван Карев — Клиентская оптимизация

11

Интернет бывает разный

• У пользователя он всегда хуже, чем у разработчика

• Региональная удаленность • Мобильный интернет

Page 12: Иван Карев — Клиентская оптимизация

12

Уменьшаем сетевые расходы

• Несколько ДЦ

Page 13: Иван Карев — Клиентская оптимизация

13

Уменьшаем сетевые расходы

• Несколько ДЦ • CDN (Content Delivery Network)

–  общие библиотеки

Page 14: Иван Карев — Клиентская оптимизация

14

Бэкенд + Фронтенд

• Нужно измерять время работы

Page 15: Иван Карев — Клиентская оптимизация

15

Отображение страницы

• Сокращаем RTT (round trip time) • Сокращаем размер ресурсов • Устанавливаем порядок подключения ресурсов

Page 16: Иван Карев — Клиентская оптимизация

16

DNS lookups

• Пути в url вместо поддоменов –  для небольших проектов –  для ускорения первого показа

Page 17: Иван Карев — Клиентская оптимизация

17

DNS lookups

• Пути в url вместо поддоменов –  для небольших проектов –  для ускорения первого показа

• Контролируем число различных доменов –  параллельная загрузка –  не больше 5

Page 18: Иван Карев — Клиентская оптимизация

18

Пример

Page 19: Иван Карев — Клиентская оптимизация

19

Редиректы

• Оставляем только необходимые –  авторизация –  синхронизация куки –  счетчики ссылок

Page 20: Иван Карев — Клиентская оптимизация

20

Редиректы

• Оставляем только необходимые –  авторизация –  синхронизация куки –  счетчики ссылок

• Http редиректы вместо meta/js редиректов

Page 21: Иван Карев — Клиентская оптимизация

21

Кэширование

• Статика –  домен без кук –  нужные заголовки –  версионирование

//yandex.st/project/file.js  //yandex.st/project/1.0/file.js  

–  инвалидация //yandex.st/project/1.1/file.js  

Page 22: Иван Карев — Клиентская оптимизация

22

<div class="infopanel" id="infopanel_post_153001">!!! ! ! <div class="voting ">!! ! ! <span class="plus" title="Голосовать могут только зарегистрированные пользователи."></span>! !! <div class="mark">!

Пример из жизни

Page 23: Иван Карев — Клиентская оптимизация

23

/**! * В этом файле описан функционал, который реализует плавающий баннер в правой части сайта :) */! !$(document).ready(function(){!!!if( $('.similar_questions').size() ) {!! !show_float_block('.similar_questions')!!}else if( $('.daily_best_posts').size() ) {!! !show_float_block('.daily_best_posts')!!}!!!!!! !!

})!

Пример из жизни

Page 24: Иван Карев — Клиентская оптимизация

24

/* ==forms== */!/**! * Стили для элементов форм Базовые стили. Большие формы (width: 100%)! */ !input, select, textarea{font-family:'arial', sans-serif;font-size:12px;}! !form{}!!/* Многострочное текстовое поле */!form .item textarea{height:200px;width:99%;}!

Пример из жизни

Page 25: Иван Карев — Клиентская оптимизация

25

Сжатие

• Минификация и обфускация js/css/html –  YUI Compressor, GCC, UglifyJS, ... –  оптимизация html (кавычки, пробелы, переводы строк)

Page 26: Иван Карев — Клиентская оптимизация

26

Сжатие

• Минификация и обфускация js/css/html • Gzip js/css/html

Page 27: Иван Карев — Клиентская оптимизация

27

Сжатие

• Минификация и обфускация js/css/html • Gzip js/css/html • Оптимизация картинок

–  optipng, imgo, svgo, ... –  веб-сервисы

Page 28: Иван Карев — Клиентская оптимизация

28

<link href="/styles/1349162592/_parts/posts.css" rel="stylesheet"/>!<link href="/styles/1349162592/highlight.css" rel="stylesheet"/>!<link href="/styles/1349162592/forms.css" rel="stylesheet"/>!<link href="/styles/1349162592/posts/index.css" rel="stylesheet"/>!<link href="/styles/1349162592/hubs/all.css" rel="stylesheet"/>!<script src="/javascripts/1349162592/all.js"></script>!<script src="/javascripts/1349162592/_parts/posts.js"></script>!<script src="/javascripts/1349162592/libs/jquery.form.js"></script>!<script src="/javascripts/1349162592/libs/highlight.js"></script>!<script src="/javascripts/1349162592/hubs/all.js"></script>!<script src="/javascripts/1349162592/posts/all.js"></script>!

Пример из жизни

Page 29: Иван Карев — Клиентская оптимизация

29

Объединение файлов

• Встроенные стили/скрипты

<head> <style> .selector {...} </style> <script> function init() {...} </script> </head>

Page 30: Иван Карев — Клиентская оптимизация

30

Объединение файлов

• Встроенные стили/скрипты • Склеиваем внешние стили/скрипты

–  2-3 файла

Page 31: Иван Карев — Клиентская оптимизация

31

Пример

Page 32: Иван Карев — Клиентская оптимизация

32

Объединение файлов

• Встроенные стили/скрипты • Склеиваем внешние стили/скрипты

–  2-3 файла

• Сжимаем картинки –  спрайт

–  base64 background-image:url(data:image/png;base64,iVBORw0KG...

Page 33: Иван Карев — Клиентская оптимизация

33

Порядок стилей и скриптов

• Стили сверху (в head) • Скрипты снизу (в конце body)

Page 34: Иван Карев — Клиентская оптимизация

34

Порядок стилей и скриптов

• Стили сверху (в head) • Скрипты снизу (в конце body) • Подключать ресурсы по необходимости

Page 35: Иван Карев — Клиентская оптимизация

35

Измерение времени загрузки

• Базовые оптимизации делаем без измерений

• Эксперименты только с измерениями

Page 36: Иван Карев — Клиентская оптимизация

36

Инструменты

• Средства разработчика в браузере –  Сеть –  Timeline –  ...

Page 37: Иван Карев — Клиентская оптимизация

37

Пример

Page 38: Иван Карев — Клиентская оптимизация

38

Инструменты

• Средства разработчика в браузере –  Сеть –  Timeline –  ...

• Плагины –  YSlow –  ...

Page 39: Иван Карев — Клиентская оптимизация

39

Page 40: Иван Карев — Клиентская оптимизация

40

Инструменты

• Средства разработчика в браузере –  Сеть –  Timeline –  ...

• Плагины –  YSlow –  ...

• Сервисы –  WebPageTest –  ...

Page 41: Иван Карев — Клиентская оптимизация

41

Page 42: Иван Карев — Клиентская оптимизация

42

Результаты экспериментов

Page 43: Иван Карев — Клиентская оптимизация

43

Тестирование

• Тестовое окружение

Page 44: Иван Карев — Клиентская оптимизация

44

Тестирование

• Тестовое окружение • На стороне пользователей

–  скрипты на странице –  анализ результатов –  Navigation timing API

Page 45: Иван Карев — Клиентская оптимизация

45

Разработчик интерфейсов должен

• Принимать любые решения с оглядкой на пользователей

Page 46: Иван Карев — Клиентская оптимизация

46

Разработчик интерфейсов должен

• Принимать любые решения с оглядкой на пользователей

• Следить за временем отображения страниц

Page 47: Иван Карев — Клиентская оптимизация

47

Разработчик интерфейсов должен

• Принимать любые решения с оглядкой на пользователей

• Следить за временем отображения страниц • Делать это постоянно

Page 48: Иван Карев — Клиентская оптимизация

48

Ссылки

•  http://developer.yahoo.com/performance/rules.html •  https://developers.google.com/speed/docs/best-practices •  http://w3c-test.org/webperf/specs/NavigationTiming/

Page 49: Иван Карев — Клиентская оптимизация

Иван Карев

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

[email protected]

Спасибо