Отдаем страницы быстрее

или как вписаться

в требования Google

Backend meetup / MESTO

Ростов-на-Дону, 2016

Привет, меня зовут Евгений.

 

И я хочу рассказать

как сделать ваши сайты быстрее.

Откуда все это?

  • 15 лет с знакомства Open Source
  • примерно столько же сисадмин
  • C/C++, PHP, Ruby, Shell
  • 8 лет "техдиром" в веб-студии

А еще очень много часов чтения всего, что показалось интересным.

  • ну и спорить с 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) Джеффри Дивер

Про "Скорость" / Неожиданности

  • законы физики не обмануть (RTT)
  • где датацентр и где аудитория?
  • DNS сервера могут лагать или даже "лежать"
  • кстати, HTTPS "тормозит" ваш сайт
  • лимиты браузеров по коннектам

«Признаваться в незнании — одно из лучших и вернейших доказательств наличия разума»
                                 (c) Мишель де Монтень

Про "Скорость" / Магия в Nginx

  • для начала ставим Nginx

  • добавляем SPDY или HTTP/2 (на будущее)

  • OCSP stapling и Sessions в SSL (ssllabs.com)
  • прописываем 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.

Про «типовые ошибки»

  • не все "лечится" повышением цифр в конфигах
  • не храните миллионы файлов в одной папке
  • симулируйте рост данных в 10-20 раз
  • self-hosted или внешний мониторинг (NewRelic?)

«Если какая-то неприятность может произойти, она непременно случится»

                                   Закон Мерфи

Made with Slides.com