Производительность client-side

31
Производительность ClientSide Александр Бойченко @banzalik

Upload: alex-boychenko

Post on 22-Jun-2015

286 views

Category:

Internet


3 download

TRANSCRIPT

Page 1: Производительность Client-Side

Производительность  Client-­‐SideАлександр  Бойченко  

@banzalik

Page 2: Производительность Client-Side

О  чем  сегодня  поговорим?

• О  HTML  и  CSS  

• Как  ускорить  ваш  сайт  • Как  создавать  быстрые  сайты

2

Page 3: Производительность Client-Side

Когда  пора  думать  про  скорость?

• Когда  Hi-­‐Load  • Когда  сайт  приносит  деньги  • Стоит  задача  подняться  в  поисковой  выдаче

3

Page 4: Производительность Client-Side

Почему  именно  Business?

• 100  ms  задержка  =  на  1%  падение  продаж  (Amazon)  

• 400  ms  задежка  =  5-­‐9%  уменьшение  трафика  (Yahoo!)  

• 500  ms  задержка  =  20%  уменьшение  трафика  (Google)

4

Page 5: Производительность Client-Side

Чем  мерять  скорость  загрузки?

• Dev  Tools,  вкладки  ресурсы,  сеть.  • Google  page  speed  • YSlow  • http://www.webpagetest.org  • JavaScript  (Navigation  Timing  API,  сторонние  утилиты)

5

Page 6: Производительность Client-Side

Что  влияет  на  скорость  загрузки?

• Сервер  (Back-­‐End)  • Сеть  (Internet)  • Клиентский  код  (Front-­‐End)

6

Page 7: Производительность Client-Side

Сервер

• Настройка  кеширования  • Настройка  сжатия  • Уменьшение  количества  перенаправлений  • Использование  CDN  • Уменьшать  размер  cookie  • Уменьшение  времени  ответа  сервера

7

Page 8: Производительность Client-Side

Настройка  кеширования

• HTML  

• CSS  • Медиа/Картинки  

• JavaScript  • Файлы  храним  в  виде  MD5(file.ext).ext  или  SHA256(file.ext).ext  

• Например:  608333adc72f545078ede3aad71bfe74.css

8

Page 9: Производительность Client-Side

Настройка  кеширования

• Настроить  ETags  • Настроить  Expires  или  Cache-­‐Control  Header  • По  возможности  кешировать  Ajax  • По  возможности  для  Ajax  использовать  GET  запросы

9

Page 10: Производительность Client-Side

Настройка  сжатия

• Gzip  • Уровень  сжатия  6-­‐8  • Сжимать  можно  как  на  лету,  так  и  создавать  .gzip  файлы  • Создавать  .gzip  файлы  предпочтительней  • Сжимаем  все,  кроме  медиа  и  картинок

10

Page 11: Производительность Client-Side

Использование  CDN

• Не  использовать  для  ресурсов  внутри  <head>...</head>  • Не  более  4х  доменов  • Контролировать,  чтобы  конкретный  ресурс  всегда  грузился  с  одного  домена

11

Page 12: Производительность Client-Side

Уменьшение  времени  ответа  сервера

• Пинать  программистов  и  админов  • Использовать  проксирующие  сервера  такие  как  Ngnix  • Page-­‐Speed  модули  для  веб  серверов  от  Google

12

Page 13: Производительность Client-Side

Оптимизация  сети

• Использование  CDN  • Скорость  не  так  важна,  как  пинг  • Старайтесь  размещать  сервера  ближе  к  клиентам  • Минимизируйте  количество  сетевых  запросов

13

Page 14: Производительность Client-Side

Оптимизация  клиентского  кода

• HTML  

• CSS  • Графика

14

Page 15: Производительность Client-Side

Оптимизация  HTML

• CSS  и  JS  -­‐  должны  подключаться  как  внешние  файлы  • CSS  внутри  <head>  • JS  перед  закрытием  тега  </body>  • Страница  должна  уметь  работать  c  отключенным  JS  • Минимизируем  количество  <iframe>  

• Следите  за  доступностью  ресурсов,  404  не  допустимо  • Для  таблиц  table-­‐layout:  fixed    +  width

15

Page 16: Производительность Client-Side

Оптимизация  HTML

• Не  используйте  <img  src=""  />  с  пустым  атрибутом  src  

• Минимизируйте  количество  CSS  файлов  до  одного  

• Минимизируйте  количество  JS  файлов  до  одного  

• Минимизируйте  HTML  

• Внешний  код  (FB  like,  Google  analytics  и  др.)  дожен  быть  асинхронным  

• Избегайте  большой  вложенности  тегов

16

Page 17: Производительность Client-Side

Оптимизация  CSS

17

Page 18: Производительность Client-Side

Как  работает  CSS  парсер?

#header  ul  li  a  {  color:  red  }  

!• Справа  на  лево  • Находим  все  ссылки  на  странице  • Находим  все  li,  сожержащие  ссылки  • Находим  все  ul,  сожержащие  li  c  ссылками  • Находим  элементы  с  заданным  ID,  содержащим  ul  li  a

18

Page 19: Производительность Client-Side

Каскад  -­‐  это  дорого

• Старайтесь  минимизировать  каскад  

• Используйте  BEM  или  его  аналоги  

• Не  используйте  селектор  *  (звездочка)  

• Селекторы  только  по  классам  

• Никаких  ID  

• Никаких  tagName  

• Никаких  [attr="something"]  

• Селектор  по  .className  очень  быстрый  почти  как  по  #id

19

Page 20: Производительность Client-Side

Методы  оптимизации  CSS

• Не  используйте  reset.css,  normalizer.css  или  их  аналоги  

• Не  используйте  теги,  чьи  стили  требуется  сбрасывать  (ul,  p,  i  and  etc)  

• Не  используйте  @import  

• Не  используйте  IEшные  фильтры  или  кешируйте  их  

• Некоторые  фичи  CSS3  медленные  

• Спрайты  и  data:uri  

• Вендроные  префиксы,  браузерные  хаки  (определять  браузер  на  сервере  и  отдавать  ему  нужный  CSS)

20

Page 21: Производительность Client-Side

Методы  оптимизации  CSS

• Избегайте  глобальных  классов  на  <body>  и  их  переключения  

• Минимизируйте  длинну  имен  классов  

• Острожно  относиться  к  кастомным  шрифтам  

• Пользуйтесь  минификаторами  CSS,  например  CSSO  

• Autoprefixer  поможет  с  вендорными  префиксами  и  с  генерацией  стилей  для  отдельных  браузеров

21

Page 22: Производительность Client-Side

Спрайты  или  data:uri?

• Если  не  мобильные  -­‐  то  предпочтительней  data:uri  

• CSS  файл  с  data:uri  может  быть  отдельным,  не  обязательно  data:uri  включать  в  основной  CSS  файл

22

Page 23: Производительность Client-Side

Оптимизация  картинок

• Чаще  всего  требуется  только  3  формата  графики:  PNG,  JPG  и  SVG

23

Page 24: Производительность Client-Side

PNG

• Иконки  

• Полупрозрачность,  в  том  числе  и  для  PNG8  

• Мало  цветов  

• Картинки  с  текстом  

• Градиенты  

• Служебная  графика  

• Недопустима  потеря  качества

24

Page 25: Производительность Client-Side

JPG

• Фотографии  

• Изображения  большого  размера  

• Допустима  потеря  качества

25

Page 26: Производительность Client-Side

SVG

• Векторная  графика  

• Иконки  

• Есть  возможность  взаимодействовать  с  CSS  и  JS  

• Нет  проблем  с  масштабируемостью  и  retina  

• Иногда  «Мылится»  в  не  Retina

26

Page 27: Производительность Client-Side

Сжатие  графики

• Photoshop  

• Svgo  -­‐  для  svg  

• JpegMini  -­‐  для  jpg  

• ScriptPNG  или  imgo  -­‐  для  png  и  jpg  

• punypng.com,  kraken.io,  jpegmini.com,  smush.it  

• Есть  еще  десятки  инструментов  на  любой  вкус

27

Page 28: Производительность Client-Side

Favicon.ico

• Всегда  должен  лежать  в  корне  проекта  http://site.name/favicon.ico  

• Некоторые  браузеры  запрашивают  http://site.name/favicon.ico  даже  если  он  не  обьявлен  в  HTML  

• Иконки  для  мобильных

28

Page 29: Производительность Client-Side

И  еще  немного  про  графику

• Всегда  вставляйте  картинки  на  страницу  в  их  реальном  размере  

• Background-­‐size  -­‐  может  тормозить  

• Не  делайте  спрайты  очень  большими  (не  более  60  Kb)  

• Не  забывайте  оптимизировать  спрайты

29

Page 30: Производительность Client-Side

Некоторые  вещи  легко  автоматизируются

• Grunt-­‐  и  Gulp-­‐таски  для  оптимизации  производительности  (http://frontender.info/performance-­‐optimization/)

30

Page 31: Производительность Client-Side

Спасибо!

31

Александр  Бойченко  [email protected]  @banzalik