ݺߣ

ݺߣShare a Scribd company logo
Производительность 
Client-­‐Side
Александр Бойченко 
@banzalik
О чем сегодня поговорим?
• О HTML и CSS 
• Как ускорить ваш сайт 
• Как создавать быстрые сайты
2
Когда пора думать про скорость?
• Когда Hi-­‐Load 
• Когда сайт приносит деньги 
• Стоит задача подняться в поисковой выдаче
3
Почему именно Business?
• 100 ms задержка = на 1% падение продаж (Amazon) 
• 400 ms задежка = 5-­‐9% уменьшение трафика (Yahoo!) 
• 500 ms задержка = 20% уменьшение трафика (Google)
4
Чем мерять скорость загрузки?
• Dev Tools, вкладки ресурсы, сеть. 
• Google page speed 
• YSlow 
• http://www.webpagetest.org 
• JavaScript (Navigation Timing API, сторонние утилиты)
5
Что влияет на скорость загрузки?
• Сервер (Back-­‐End) 
• Сеть (Internet) 
• Клиентский код (Front-­‐End)
6
Сервер
• Настройка кеширования 
• Настройка сжатия 
• Уменьшение количества перенаправлений 
• Использование CDN 
• Уменьшать размер cookie 
• Уменьшение времени ответа сервера
7
Настройка кеширования
• HTML 
• CSS 
• Медиа/Картинки 
• JavaScript 
• Файлы храним в виде MD5(file.ext).ext или SHA256(file.ext).ext 
• Например: 608333adc72f545078ede3aad71bfe74.css
8
Настройка кеширования
• Настроить ETags 
• Настроить Expires или Cache-­‐Control Header 
• По возможности кешировать Ajax 
• По возможности для Ajax использовать GET запросы
9
Настройка сжатия
• Gzip 
• Уровень сжатия 6-­‐8 
• Сжимать можно как на лету, так и создавать .gzip файлы 
• Создавать .gzip файлы предпочтительней 
• Сжимаем все, кроме медиа и картинок
10
Использование CDN
• Не использовать для ресурсов внутри <head>...</head> 
• Не более 4х доменов 
• Контролировать, чтобы конкретный ресурс всегда грузился с 
одного домена
11
Уменьшение времени ответа сервера
• Пинать программистов и админов 
• Использовать проксирующие сервера такие как Ngnix 
• Page-­‐Speed модули для веб серверов от Google
12
Оптимизация сети
• Использование CDN 
• Скорость не так важна, как пинг 
• Старайтесь размещать сервера ближе к клиентам 
• Минимизируйте количество сетевых запросов
13
Оптимизация клиентского кода
• HTML 
• CSS 
• Графика
14
Оптимизация HTML
• CSS и JS -­‐ должны подключаться как внешние файлы 
• CSS внутри <head> 
• JS перед закрытием тега </body> 
• Страница должна уметь работать c отключенным JS 
• Минимизируем количество <iframe> 
• Следите за доступностью ресурсов, 404 не допустимо 
• Для таблиц table-­‐layout: fixed  + width
15
Оптимизация HTML
• Не используйте <img src=/slideshow/client-side/36709566/"" /> с пустым атрибутом src 
• Минимизируйте количество CSS файлов до одного 
• Минимизируйте количество JS файлов до одного 
• Минимизируйте HTML 
• Внешний код (FB like, Google analytics и др.) дожен быть 
асинхронным 
• Избегайте большой вложенности тегов
16
Оптимизация CSS
17
Как работает CSS парсер?
#header ul li a { color: red } 
!
• Справа на лево 
• Находим все ссылки на странице 
• Находим все li, сожержащие ссылки 
• Находим все ul, сожержащие li c ссылками 
• Находим элементы с заданным ID, содержащим ul li a
18
Каскад -­‐ это дорого
• Старайтесь минимизировать каскад 
• Используйте BEM или его аналоги 
• Не используйте селектор * (звездочка) 
• Селекторы только по классам 
• Никаких ID 
• Никаких tagName 
• Никаких [attr="something"] 
• Селектор по .className очень быстрый почти как по #id
19
Методы оптимизации CSS
• Не используйте reset.css, normalizer.css или их аналоги 
• Не используйте теги, чьи стили требуется сбрасывать (ul, p, i and 
etc) 
• Не используйте @import 
• Не используйте IEшные фильтры или кешируйте их 
• Некоторые фичи CSS3 медленные 
• Спрайты и data:uri 
• Вендроные префиксы, браузерные хаки (определять браузер на 
сервере и отдавать ему нужный CSS)
20
Методы оптимизации CSS
• Избегайте глобальных классов на <body> и их переключения 
• Минимизируйте длинну имен классов 
• Острожно относиться к кастомным шрифтам 
• Пользуйтесь минификаторами CSS, например CSSO 
• Autoprefixer поможет с вендорными префиксами и с генерацией 
стилей для отдельных браузеров
21
Спрайты или data:uri?
• Если не мобильные -­‐ то предпочтительней data:uri 
• CSS файл с data:uri может быть отдельным, не обязательно 
data:uri включать в основной CSS файл
22
Оптимизация картинок
• Чаще всего требуется только 3 формата графики: PNG, JPG и SVG
23
PNG
• Иконки 
• Полупрозрачность, в том числе и для PNG8 
• Мало цветов 
• Картинки с текстом 
• Градиенты 
• Служебная графика 
• Недопустима потеря качества
24
JPG
• Фотографии 
• Изображения большого размера 
• Допустима потеря качества
25
SVG
• Векторная графика 
• Иконки 
• Есть возможность взаимодействовать с CSS и JS 
• Нет проблем с масштабируемостью и retina 
• Иногда «Мылится» в не Retina
26
Сжатие графики
• Photoshop 
• Svgo -­‐ для svg 
• JpegMini -­‐ для jpg 
• ScriptPNG или imgo -­‐ для png и jpg 
• punypng.com, kraken.io, jpegmini.com, smush.it 
• Есть еще десятки инструментов на любой вкус
27
Favicon.ico
• Всегда должен лежать в корне проекта http://site.name/favicon1.ico 
• Некоторые браузеры запрашивают http://site.name/favicon1.ico 
даже если он не обьявлен в HTML 
• Иконки для мобильных
28
И еще немного про графику
• Всегда вставляйте картинки на страницу в их реальном размере 
• Background-­‐size -­‐ может тормозить 
• Не делайте спрайты очень большими (не более 60 Kb) 
• Не забывайте оптимизировать спрайты
29
Некоторые вещи легко автоматизируются
• Grunt-­‐ и Gulp-­‐таски для оптимизации производительности (http://
frontender.info/performance-­‐optimization/)
30
Спасибо!
31
Александр Бойченко 
banzalik@gmail.com 
@banzalik

More Related Content

What's hot (19)

Получаем текст веб-страниц из Python и как это работает
Получаем текст веб-страниц из Python и как это работаетПолучаем текст веб-страниц из Python и как это работает
Получаем текст веб-страниц из Python и как это работает
PyNSK
Оптимизация текстов. Модуль 17
Оптимизация текстов. Модуль 17Оптимизация текстов. Модуль 17
Оптимизация текстов. Модуль 17
EMPOpro
Артур Латыпов - семантическое ядро для SEO
Артур Латыпов - семантическое ядро для SEOАртур Латыпов - семантическое ядро для SEO
Артур Латыпов - семантическое ядро для SEO
-Интеллект
Drupal Perfomance issues, tips & tricks. Антон Иванов.
Drupal Perfomance issues, tips & tricks. Антон Иванов.Drupal Perfomance issues, tips & tricks. Антон Иванов.
Drupal Perfomance issues, tips & tricks. Антон Иванов.
DrupalCampDN
Кеширование на высоконагруженном Drupal сайте. Архаров Роман
Кеширование на высоконагруженном Drupal сайте. Архаров РоманКеширование на высоконагруженном Drupal сайте. Архаров Роман
Кеширование на высоконагруженном Drupal сайте. Архаров Роман
PVasili
Как сделать сайт с минимальным бюджетом
Как сделать сайт с минимальным бюджетомКак сделать сайт с минимальным бюджетом
Как сделать сайт с минимальным бюджетом
ActiveCloud
1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov
elenae00
Семинар Евгения Костина "Продвижение молодого сайта в ТОП"
Семинар Евгения Костина "Продвижение молодого сайта в ТОП"Семинар Евгения Костина "Продвижение молодого сайта в ТОП"
Семинар Евгения Костина "Продвижение молодого сайта в ТОП"
Аня Моисеева
Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2
Vasiliy Vanchuck
Cпецкурс 2014, занятие 9 (1 часть). Языки разметки
Cпецкурс 2014, занятие 9 (1 часть). Языки разметкиCпецкурс 2014, занятие 9 (1 часть). Языки разметки
Cпецкурс 2014, занятие 9 (1 часть). Языки разметки
7bits
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Ontico
Caching on highload drupal site roman arkharov (eng)
Caching on highload drupal site  roman arkharov (eng)Caching on highload drupal site  roman arkharov (eng)
Caching on highload drupal site roman arkharov (eng)
drupalconf
русоникс скорость-сайтов
русоникс скорость-сайтоврусоникс скорость-сайтов
русоникс скорость-сайтов
Andreas Schwarzkopf
Оптимизация контента. Mодуль14-16
Оптимизация контента. Mодуль14-16Оптимизация контента. Mодуль14-16
Оптимизация контента. Mодуль14-16
EMPOpro
Как оптимизировать текст для поисковых систем
Как оптимизировать текст для поисковых системКак оптимизировать текст для поисковых систем
Как оптимизировать текст для поисковых систем
Сергей Кокшаров
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Fuenteovejuna
10 наиболее важных инструментов seo-оптимизатора (вебинар #2)
10 наиболее важных инструментов seo-оптимизатора (вебинар #2)10 наиболее важных инструментов seo-оптимизатора (вебинар #2)
10 наиболее важных инструментов seo-оптимизатора (вебинар #2)
Сергей Кокшаров
Защищаем WordPress-сайт от хакерских атак
Защищаем WordPress-сайт от хакерских атакЗащищаем WordPress-сайт от хакерских атак
Защищаем WordPress-сайт от хакерских атак
Ruslan Sukhar
SEO-Audit seo summit websarafan 2016
SEO-Audit seo summit websarafan 2016SEO-Audit seo summit websarafan 2016
SEO-Audit seo summit websarafan 2016
Yuriy Khait
Получаем текст веб-страниц из Python и как это работает
Получаем текст веб-страниц из Python и как это работаетПолучаем текст веб-страниц из Python и как это работает
Получаем текст веб-страниц из Python и как это работает
PyNSK
Оптимизация текстов. Модуль 17
Оптимизация текстов. Модуль 17Оптимизация текстов. Модуль 17
Оптимизация текстов. Модуль 17
EMPOpro
Артур Латыпов - семантическое ядро для SEO
Артур Латыпов - семантическое ядро для SEOАртур Латыпов - семантическое ядро для SEO
Артур Латыпов - семантическое ядро для SEO
-Интеллект
Drupal Perfomance issues, tips & tricks. Антон Иванов.
Drupal Perfomance issues, tips & tricks. Антон Иванов.Drupal Perfomance issues, tips & tricks. Антон Иванов.
Drupal Perfomance issues, tips & tricks. Антон Иванов.
DrupalCampDN
Кеширование на высоконагруженном Drupal сайте. Архаров Роман
Кеширование на высоконагруженном Drupal сайте. Архаров РоманКеширование на высоконагруженном Drupal сайте. Архаров Роман
Кеширование на высоконагруженном Drupal сайте. Архаров Роман
PVasili
Как сделать сайт с минимальным бюджетом
Как сделать сайт с минимальным бюджетомКак сделать сайт с минимальным бюджетом
Как сделать сайт с минимальным бюджетом
ActiveCloud
1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov1 2 2_1_c-bitrix_kuleshov
1 2 2_1_c-bitrix_kuleshov
elenae00
Семинар Евгения Костина "Продвижение молодого сайта в ТОП"
Семинар Евгения Костина "Продвижение молодого сайта в ТОП"Семинар Евгения Костина "Продвижение молодого сайта в ТОП"
Семинар Евгения Костина "Продвижение молодого сайта в ТОП"
Аня Моисеева
Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2Отполифиль свой CSS - MinskCSS 2
Отполифиль свой CSS - MinskCSS 2
Vasiliy Vanchuck
Cпецкурс 2014, занятие 9 (1 часть). Языки разметки
Cпецкурс 2014, занятие 9 (1 часть). Языки разметкиCпецкурс 2014, занятие 9 (1 часть). Языки разметки
Cпецкурс 2014, занятие 9 (1 часть). Языки разметки
7bits
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Ontico
Caching on highload drupal site roman arkharov (eng)
Caching on highload drupal site  roman arkharov (eng)Caching on highload drupal site  roman arkharov (eng)
Caching on highload drupal site roman arkharov (eng)
drupalconf
русоникс скорость-сайтов
русоникс скорость-сайтоврусоникс скорость-сайтов
русоникс скорость-сайтов
Andreas Schwarzkopf
Оптимизация контента. Mодуль14-16
Оптимизация контента. Mодуль14-16Оптимизация контента. Mодуль14-16
Оптимизация контента. Mодуль14-16
EMPOpro
Как оптимизировать текст для поисковых систем
Как оптимизировать текст для поисковых системКак оптимизировать текст для поисковых систем
Как оптимизировать текст для поисковых систем
Сергей Кокшаров
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Fuenteovejuna
10 наиболее важных инструментов seo-оптимизатора (вебинар #2)
10 наиболее важных инструментов seo-оптимизатора (вебинар #2)10 наиболее важных инструментов seo-оптимизатора (вебинар #2)
10 наиболее важных инструментов seo-оптимизатора (вебинар #2)
Сергей Кокшаров
Защищаем WordPress-сайт от хакерских атак
Защищаем WordPress-сайт от хакерских атакЗащищаем WordPress-сайт от хакерских атак
Защищаем WordPress-сайт от хакерских атак
Ruslan Sukhar
SEO-Audit seo summit websarafan 2016
SEO-Audit seo summit websarafan 2016SEO-Audit seo summit websarafan 2016
SEO-Audit seo summit websarafan 2016
Yuriy Khait

Similar to Производительность Client-Side (20)

Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
 Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
GoIT
Управление сетками сайтов
Управление сетками сайтовУправление сетками сайтов
Управление сетками сайтов
Playtini
Управление сетками сайтов
Управление сетками сайтовУправление сетками сайтов
Управление сетками сайтов
Евгений Летов
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
Разработка Rich Text Editor: проблемы и решения / Егор Яковишен (Setka)
Разработка Rich Text Editor: проблемы и решения / Егор Яковишен (Setka)Разработка Rich Text Editor: проблемы и решения / Егор Яковишен (Setka)
Разработка Rich Text Editor: проблемы и решения / Егор Яковишен (Setka)
Ontico
«Правильный процесс дает правильный результат». Как грамотно выстроить работу...
«Правильный процесс дает правильный результат». Как грамотно выстроить работу...«Правильный процесс дает правильный результат». Как грамотно выстроить работу...
«Правильный процесс дает правильный результат». Как грамотно выстроить работу...
borovoystudio
Антон Рева - презентация с конференции NaZapad
Антон Рева - презентация с конференции NaZapadАнтон Рева - презентация с конференции NaZapad
Антон Рева - презентация с конференции NaZapad
NaZapad
Mobile web apps
Mobile web appsMobile web apps
Mobile web apps
Pavlo Iuriichuk
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Николай Лавлинский
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Ontico
Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»
Yandex
NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...
Ontico
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный вебHappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
Roman Dvornov
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Alexey Kostin
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TKConf
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
Anton Piskunov
Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
 Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
Встреча "Front-end: на старт, внимание, разработка!", Сергей Пузанков
GoIT
Управление сетками сайтов
Управление сетками сайтовУправление сетками сайтов
Управление сетками сайтов
Playtini
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
Разработка Rich Text Editor: проблемы и решения / Егор Яковишен (Setka)
Разработка Rich Text Editor: проблемы и решения / Егор Яковишен (Setka)Разработка Rich Text Editor: проблемы и решения / Егор Яковишен (Setka)
Разработка Rich Text Editor: проблемы и решения / Егор Яковишен (Setka)
Ontico
«Правильный процесс дает правильный результат». Как грамотно выстроить работу...
«Правильный процесс дает правильный результат». Как грамотно выстроить работу...«Правильный процесс дает правильный результат». Как грамотно выстроить работу...
«Правильный процесс дает правильный результат». Как грамотно выстроить работу...
borovoystudio
Антон Рева - презентация с конференции NaZapad
Антон Рева - презентация с конференции NaZapadАнтон Рева - презентация с конференции NaZapad
Антон Рева - презентация с конференции NaZapad
NaZapad
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Николай Лавлинский
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Ontico
Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»
Yandex
NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...
Ontico
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный вебHappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite-2016-весна 02 Дмитрий Пашкевич. Нетривиальный веб
HappyDev-lite
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
Roman Dvornov
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Alexey Kostin
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TKConf
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
Anton Piskunov

More from Aleksandr Boichenko (6)

Developer tools - подробное руководство разработчика
Developer tools - подробное руководство разработчикаDeveloper tools - подробное руководство разработчика
Developer tools - подробное руководство разработчика
Aleksandr Boichenko
Разработка сайтов с учетом мобильных платформ
Разработка сайтов с учетом мобильных платформРазработка сайтов с учетом мобильных платформ
Разработка сайтов с учетом мобильных платформ
Aleksandr Boichenko
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENB
Aleksandr Boichenko
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.Танка
Aleksandr Boichenko
Приложения для соцсетей. Универсальные приложения на БЭМ
Приложения для соцсетей. Универсальные приложения на БЭМПриложения для соцсетей. Универсальные приложения на БЭМ
Приложения для соцсетей. Универсальные приложения на БЭМ
Aleksandr Boichenko
Developer tools - подробное руководство разработчика
Developer tools - подробное руководство разработчикаDeveloper tools - подробное руководство разработчика
Developer tools - подробное руководство разработчика
Aleksandr Boichenko
Разработка сайтов с учетом мобильных платформ
Разработка сайтов с учетом мобильных платформРазработка сайтов с учетом мобильных платформ
Разработка сайтов с учетом мобильных платформ
Aleksandr Boichenko
Сборка проектов с помощью ENB
Сборка проектов с помощью ENBСборка проектов с помощью ENB
Сборка проектов с помощью ENB
Aleksandr Boichenko
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.Танка
Aleksandr Boichenko
Приложения для соцсетей. Универсальные приложения на БЭМ
Приложения для соцсетей. Универсальные приложения на БЭМПриложения для соцсетей. Универсальные приложения на БЭМ
Приложения для соцсетей. Универсальные приложения на БЭМ
Aleksandr Boichenko

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

  • 2. О чем сегодня поговорим? • О HTML и CSS • Как ускорить ваш сайт • Как создавать быстрые сайты 2
  • 3. Когда пора думать про скорость? • Когда Hi-­‐Load • Когда сайт приносит деньги • Стоит задача подняться в поисковой выдаче 3
  • 4. Почему именно Business? • 100 ms задержка = на 1% падение продаж (Amazon) • 400 ms задежка = 5-­‐9% уменьшение трафика (Yahoo!) • 500 ms задержка = 20% уменьшение трафика (Google) 4
  • 5. Чем мерять скорость загрузки? • Dev Tools, вкладки ресурсы, сеть. • Google page speed • YSlow • http://www.webpagetest.org • JavaScript (Navigation Timing API, сторонние утилиты) 5
  • 6. Что влияет на скорость загрузки? • Сервер (Back-­‐End) • Сеть (Internet) • Клиентский код (Front-­‐End) 6
  • 7. Сервер • Настройка кеширования • Настройка сжатия • Уменьшение количества перенаправлений • Использование CDN • Уменьшать размер cookie • Уменьшение времени ответа сервера 7
  • 8. Настройка кеширования • HTML • CSS • Медиа/Картинки • JavaScript • Файлы храним в виде MD5(file.ext).ext или SHA256(file.ext).ext • Например: 608333adc72f545078ede3aad71bfe74.css 8
  • 9. Настройка кеширования • Настроить ETags • Настроить Expires или Cache-­‐Control Header • По возможности кешировать Ajax • По возможности для Ajax использовать GET запросы 9
  • 10. Настройка сжатия • Gzip • Уровень сжатия 6-­‐8 • Сжимать можно как на лету, так и создавать .gzip файлы • Создавать .gzip файлы предпочтительней • Сжимаем все, кроме медиа и картинок 10
  • 11. Использование CDN • Не использовать для ресурсов внутри <head>...</head> • Не более 4х доменов • Контролировать, чтобы конкретный ресурс всегда грузился с одного домена 11
  • 12. Уменьшение времени ответа сервера • Пинать программистов и админов • Использовать проксирующие сервера такие как Ngnix • Page-­‐Speed модули для веб серверов от Google 12
  • 13. Оптимизация сети • Использование CDN • Скорость не так важна, как пинг • Старайтесь размещать сервера ближе к клиентам • Минимизируйте количество сетевых запросов 13
  • 15. Оптимизация HTML • CSS и JS -­‐ должны подключаться как внешние файлы • CSS внутри <head> • JS перед закрытием тега </body> • Страница должна уметь работать c отключенным JS • Минимизируем количество <iframe> • Следите за доступностью ресурсов, 404 не допустимо • Для таблиц table-­‐layout: fixed + width 15
  • 16. Оптимизация HTML • Не используйте <img src=/slideshow/client-side/36709566/"" /> с пустым атрибутом src • Минимизируйте количество CSS файлов до одного • Минимизируйте количество JS файлов до одного • Минимизируйте HTML • Внешний код (FB like, Google analytics и др.) дожен быть асинхронным • Избегайте большой вложенности тегов 16
  • 18. Как работает CSS парсер? #header ul li a { color: red } ! • Справа на лево • Находим все ссылки на странице • Находим все li, сожержащие ссылки • Находим все ul, сожержащие li c ссылками • Находим элементы с заданным ID, содержащим ul li a 18
  • 19. Каскад -­‐ это дорого • Старайтесь минимизировать каскад • Используйте BEM или его аналоги • Не используйте селектор * (звездочка) • Селекторы только по классам • Никаких ID • Никаких tagName • Никаких [attr="something"] • Селектор по .className очень быстрый почти как по #id 19
  • 20. Методы оптимизации CSS • Не используйте reset.css, normalizer.css или их аналоги • Не используйте теги, чьи стили требуется сбрасывать (ul, p, i and etc) • Не используйте @import • Не используйте IEшные фильтры или кешируйте их • Некоторые фичи CSS3 медленные • Спрайты и data:uri • Вендроные префиксы, браузерные хаки (определять браузер на сервере и отдавать ему нужный CSS) 20
  • 21. Методы оптимизации CSS • Избегайте глобальных классов на <body> и их переключения • Минимизируйте длинну имен классов • Острожно относиться к кастомным шрифтам • Пользуйтесь минификаторами CSS, например CSSO • Autoprefixer поможет с вендорными префиксами и с генерацией стилей для отдельных браузеров 21
  • 22. Спрайты или data:uri? • Если не мобильные -­‐ то предпочтительней data:uri • CSS файл с data:uri может быть отдельным, не обязательно data:uri включать в основной CSS файл 22
  • 23. Оптимизация картинок • Чаще всего требуется только 3 формата графики: PNG, JPG и SVG 23
  • 24. PNG • Иконки • Полупрозрачность, в том числе и для PNG8 • Мало цветов • Картинки с текстом • Градиенты • Служебная графика • Недопустима потеря качества 24
  • 25. JPG • Фотографии • Изображения большого размера • Допустима потеря качества 25
  • 26. SVG • Векторная графика • Иконки • Есть возможность взаимодействовать с CSS и JS • Нет проблем с масштабируемостью и retina • Иногда «Мылится» в не Retina 26
  • 27. Сжатие графики • Photoshop • Svgo -­‐ для svg • JpegMini -­‐ для jpg • ScriptPNG или imgo -­‐ для png и jpg • punypng.com, kraken.io, jpegmini.com, smush.it • Есть еще десятки инструментов на любой вкус 27
  • 28. Favicon.ico • Всегда должен лежать в корне проекта http://site.name/favicon1.ico • Некоторые браузеры запрашивают http://site.name/favicon1.ico даже если он не обьявлен в HTML • Иконки для мобильных 28
  • 29. И еще немного про графику • Всегда вставляйте картинки на страницу в их реальном размере • Background-­‐size -­‐ может тормозить • Не делайте спрайты очень большими (не более 60 Kb) • Не забывайте оптимизировать спрайты 29
  • 30. Некоторые вещи легко автоматизируются • Grunt-­‐ и Gulp-­‐таски для оптимизации производительности (http:// frontender.info/performance-­‐optimization/) 30