46
От 40 до 2 секунд Увеличиваем скорость загрузки сайта Колосов Павел, Тензор, 2015 год

От 40 до 2 секунд

Embed Size (px)

Citation preview

Page 1: От 40 до 2 секунд

От 40 до 2 секунд

Увеличиваем скорость загрузки сайта

Колосов Павел, Тензор, 2015 год

Page 2: От 40 до 2 секунд

Цель доклада

Как начать оптимизировать свой сайт?

Page 3: От 40 до 2 секунд

Обо мне

Весь 2014 год работал в стартапе “Веселый Жираф” ( www.happy-giraffe.ru )

Менеджером

Подписал NDA

Page 4: От 40 до 2 секунд

http://www.happy-giraffe.ru/

Page 5: От 40 до 2 секунд

Вводные данные проекта

● 3 500 000 уникальных пользователей в месяц

● Примерно 250 000 уникальных пользователей в день

● От 750 000 хитов в день● 1 000 000+ страниц

Page 6: От 40 до 2 секунд

Вводные данные проекта

http://www.happy-giraffe.ru/

Page 7: От 40 до 2 секунд

Вводные данные проекта

● Никто из программистов упорно не замечал проблем

● Руководство не понимало что делать

Page 8: От 40 до 2 секунд

Первая проблема

У ведущего разработчика iMac 27 дюймов и 24GB памяти

Решение:● Celeron Core2 Duo T5550 3GB

Page 9: От 40 до 2 секунд

Первая проблема

Правило 1: тестируйте на разных устройствах

Page 10: От 40 до 2 секунд

С чего начали

● PageSpeed:o Desktop 70-80o Mobile 50-60

● На “тестовой” машинеo OnLoad 40+ секo DOMContentLoaded 6+ секo Первый нормальный render 8+ сек

Page 11: От 40 до 2 секунд

Задача от руководства

● OnReady 0.1 секунда● OnLoad 0.4 секунды● Добиться за 1 месяц

Page 12: От 40 до 2 секунд

Правило 2:

Не беритесь за проект, который не осилите

Правило 3:

Проект, вероятнее всего, займет много времени, очень много времени

Page 13: От 40 до 2 секунд

Правило 4:

Инфраструктурные изменения планируйте на лето, так как бизнес-активность минимальная

Page 14: От 40 до 2 секунд

Теория

На что мы можем влиять:● время ответа сервера (ping)● время генерации файла● время передачи файла● последовательность загрузки файлов● используемые технологии на клиенте ● количество контента

Critical Render Path

Page 15: От 40 до 2 секунд

Правило 5:

Начинайте работы с поиска узких мест

Page 16: От 40 до 2 секунд

Анализ - Что будем наблюдать?

● Браузер:o DOMContentLoadedo OnLoad

● request time (access.log)

Page 17: От 40 до 2 секунд

Анализ - Что будем наблюдать?

Правило 6:

Не меряйте средние величины, делите на группы

Page 18: От 40 до 2 секунд

Анализ - Что будем наблюдать?

Пример:1 000 000 страниц и 50+ типов страниц:● Тип А - 50% просмотров● Тип B - 30% просмотров● Тип C - 10% просмотров● …

Page 19: От 40 до 2 секунд

Анализ - Что будем наблюдать?

Правило 7:

Идите от просмотров, а не от количества

Page 20: От 40 до 2 секунд

Как мерим?

Сначала все руками, чтобы понять причины:● Консоль разработчикаПотом статистический анализ:● kibana(elasticsearch) для nginx● RUM (real user measurement)

Page 21: От 40 до 2 секунд

Что не является поводом к действию?

● Google analitics и Яндекс.метрика не подошли

● PageSpeed, YSlow

Page 22: От 40 до 2 секунд

JS

Разбираемся с JS:● 80+ файлов● В head● Синхронно● Около 40 вставок в body

Page 23: От 40 до 2 секунд

JS

http://www.reporter.com.ua/

Page 24: От 40 до 2 секунд

JS

http://www.reporter.com.ua/http://tattooirovki.com/

Page 25: От 40 до 2 секунд

JS

Правило 8:

Не давать PHP программистам писать JS код

Page 26: От 40 до 2 секунд

JS - Что можно сделать?

● RequireJS, browserify, webpack● По максимуму использовать асинхронную

загрузку● Убрать скрипты в конец body

Page 27: От 40 до 2 секунд

JS

Правило 9:

Организовывайте js код правильно с самого начала

Правило 10:

Планируйте жизнь в двух состояниях кода

Page 28: От 40 до 2 секунд

JS - Результат

● Browserify лучше● Максимальный прирост

производительности - если скрипты в конце body

● Используйте google tag для маркетинга● DOMContentLoad - responseEnd < 0.7● Реклама - зло, так как российские

системы себя не оптимизируют

Page 29: От 40 до 2 секунд

<div><script>… document.write(‘<script src=”...”></script>’)…</script></div>

JS - Результат

Page 30: От 40 до 2 секунд

JS почему common лучше?

knockoutjQuery

Page 31: От 40 до 2 секунд

CSS

● Убрать не используемые селекторы● Отказаться от поддержки IE8● Разделить на файлы по статистике

посещения (страницы A,B,C)● Уменьшить количество подключаемых

файлов, в том числе изображений

Page 32: От 40 до 2 секунд

CSS - Результат

● Очистка css от неиспользуемых селекторов дало плохой результат

● Разбить по статистике - уменьшило файл в 4 раза

● Уменьшения количества изображений (объединение в спрайты) - хорошо

● Загружать шрифты - плохо

Page 33: От 40 до 2 секунд

CSS - Результат

http://sourcejs.com/

Page 34: От 40 до 2 секунд

Сеть

ping● vk, odnoklassniki - 40 мс● happy-giraffe.ru - 80 мс

Можно переносить сервера, можно ставить кеш сервер в России

Page 35: От 40 до 2 секунд

Сеть - CDN

1930 год - максимальная скорость 125км/час

http://www.rgo-sib.ru/

Page 36: От 40 до 2 секунд

Сеть - CDN

1930 год - max скорость 125 км/час1957 год - max скорость 175 км/час

http://www.rgo-sib.ru/

Page 37: От 40 до 2 секунд

Сеть - CDN

1930 год - max скорость 125 км/час1957 год - max скорость 175 км/час2000 год - 120 км/час

Page 38: От 40 до 2 секунд

Сеть - CDN

Правило 11:

Деньгами сайт ускорить нельзя

Page 39: От 40 до 2 секунд

Backend

● Профилирование XHprof

● Архитектура

● Правильное кеширование

Page 40: От 40 до 2 секунд

Backend - кеширование

● Учитывать время жизни объектов

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

● Разрабатывайте, чтобы работало без кеша

● Старайтесь отсрочить момент, когда кеш станет частью инфраструктуры

Page 41: От 40 до 2 секунд

Backend - Результаты

● Request time уменьшился до 0,6

● С включенным кешем до 0,3

● Кеширование на nginx до 0,05

Page 42: От 40 до 2 секунд

Итог

● HTML отдается <2 секунды

● DOMContentLoaded <3 секунд

● OnLoad <10 секундЛучшие результаты:

● HTML отдается 0,35 секунды

● DOMContentLoaded <1 секунд

● OnLoad <7 секунд

Page 43: От 40 до 2 секунд

А почему долгое время OnLoad?

А потому что AMD и 90+ файлов js

Page 44: От 40 до 2 секунд

Апрель-май обучающий курс

https://hexlet.io/

Page 45: От 40 до 2 секунд

Контакты

[email protected]: pavshukk

Page 46: От 40 до 2 секунд

Вопросы?