Backend meetup / MESTO
Ростов-на-Дону, 2016
Привет, меня зовут Евгений.
И я хочу рассказать
как сделать ваши сайты быстрее.
Откуда все это?
А еще очень много часов чтения всего, что показалось интересным.
ну и спорить с Google вообще без вариантов ;)
ваши страницы должны отвечать за 0.2 секунды
у вас должен быть HTTPS на сайте
проверяйтесь в PageSpeed Insights и исправляйте
пользуйтесь "Developer Tools" в Google Chrome
Что от меня хочет Google?
«Don't be evil»
(c) Paul Buchheit, Google
Почему скорость важна?
0,5с задержки снижают прибыль на 1,1-1,4% (Bing)
0,1с задержки уменьшает выручку на 1% (Amazon)
0,5с задержки уменьшают просмотры на 3% (Facebook)
2,16с уменьшают количество загрузок на 15,4% (Mozilla)
«Промедление смерти подобно»
(c) Петр Первый
Что с медленными сайтами?
как долго вы сами ждете?
теряют аудиторию
падает конверсия
теряют позиции в поисковиках
радуют конкурентов
«Если вы видите, что ваш конкурент тонет, возьмите пожарный шланг и засуньте ему в рот»
(c) Рэй Крок
Про "Скорость"
загрузка страницы "под капотом"
неожиданные причины для тормозов
немного магии на стороне сервера
тюним код и верстку, кэшируем
как быть в особо "тяжелых" случаях
Дальше по тексту ожидается
"капитанство" ¯\_(ツ)_/¯
Про "Скорость" / Загрузка
вводится адрес в браузере
ищем IP адрес сервера в DNS
подключаемся к серверу по TCP
HTTPS - валидность и параметры
тащим страницу (TTFB) и ресурсы
«Самые лучшие инвестиции — в знания»
(с) Бенджамин Франклин
Про "Скорость" / Где тормоза?
открываем Network в DevTools (Chrome)
запрашиваем нужную страницу
внимательно смотрим на waterfall
проверяем вкладки timing
«Очевидное очень часто ускользает от внимания многих людей»
(c) Джеффри Дивер
Про "Скорость" / Неожиданности
«Признаваться в незнании — одно из лучших и вернейших доказательств наличия разума»
(c) Мишель де Монтень
Про "Скорость" / Магия в Nginx
для начала ставим Nginx
добавляем SPDY или HTTP/2 (на будущее)
прописываем mime-types в gzip
расставляем нужные "expires"
Тут респект Игорю Сысоеву!
Про "Скорость" / Генерация страниц
профилируем скрипты и ищем bottleneck's
корректируем Cache-Control и Expires
кэшируем страницы (файлы/memcached/etc)
кэшируем "каркас" и тащим остальное Ajax'ом
«Между успехом и неудачей лежит пропасть, имя которой "у меня нет времени"»
(c) Франклин Филд
Про "Скорость" / Работа с базой
смотрим что интересного в slow логах
расставляем индексы в базе
проверяем explain и оптимизируем запросы
проверяем нет ли блокировок в базе
xxx: На моей работе самая страшная фраза это: "ребята, за какую дату у нас есть бэкап базы данных?"
(c) bash.org.ru
Про "Скорость" / Статика и контент
минифицируем js и css, пережимаем картинки
склеиваем и сокращаем количество запросов
тестируем в PageSpeed Insights и исправляем
добавляем ngx_pagespeed, если лениво
подключаем CDN для статики и контента
«Или не берись, или доводи до конца»
(c) Овидий
Про "Скорость" / Тюнинг
задаем разумное значение "idle" процессов
unix-сокет быстрее и "дешевле" TCP
добавляем keepalive для бэкенда
думаем про "persistent connections" с базой
подбираем keepalive для браузеров
«Non est finis perfectionis»
Про "Скорость" / На вырост
добавляем кэширование в Nginx
мониторим сервер(а) и метрики софта
добавляем бэкенды для генерации страниц
реплики базы для "чтения" или кластер
SSL-терминация ближе к посетителю
- Nobody is perfect.
- I'm nobody.
Про «типовые ошибки»
«Если какая-то неприятность может произойти, она непременно случится»
Закон Мерфи
дальше в "Типовых ошибках веб-разработчиков"