Upload
frontdays
View
617
Download
1
Embed Size (px)
Citation preview
Откуда я?• Зовут: Кучмин Илья • Лаборатория Свободных Решений • Должность: Ведущий инженер • Общий стаж в отросли: 11 лет • Twitter: @ikuchmin • GitHub: https://github.com/ikuchmin • Mail: [email protected]
Почему мне можно?..
• 2 года продавцом-консультантом • 2 года специалистом AnyKey • 3 года системным администратором • 3 года разработчиком
Зачем и почему?• В мире много «хороших» пользователей на медленных каналах
• Формирует позитивное отношение пользователя к сайту
• Формирует позитивное отношение заказчика к исполнителю
• Это интересно. Развивает специалистов. ;-)
План оптимизаций
• Постановка задачи.
• Определение точек приложения силы.
• Реализация основных идей и анализ (замер) результатов
• Рефакторинг, рефакторинг, тесты
Постановка задачи• Отдача и рендеринг важного контента пользователю в течении первых 2 секунд.
• Акцент на первое посещение пользователя
Определение точек приложения силы
• Приоритизация контента, определение наиболее/наименее важного. Формирование внешнего вида страницы по окончании 2 сек.
• Построение плана загрузки страницы, с точностью до …
• Приоритизация и разделение технологических ресурсов страницы (css, image, js)
• Обеспечение контроля над загрузкой ресурсов
• Использование эффектов для незаметной подмены загруженных ресурсов
В первую очередь!• Поставьте NGINX. Включите сжатие трафика
• Сделайте минификацию для ресурсов. Будете спать лучше. ;-) Теоретическая экономия ресурсов сервера.
• Сделайте in-line css. Gulp -> inline css
• <script … async></script>
• Избавьтесь, если это возможно, от крупных css, js библиотек. Плохо работает inline, большой размер…
Проблемы
• Параллельная загрузка
• Много CSS. > 10 Kb
• Бинарные объекты. Основное изображение, палитра в конце страницы
Решения• Последовательную загрузка. Контроль сетевого канала и последовательности загрузки ресурсов
• Добавление блоков по готовности
• Разделение HTML на блоки с их подгрузкой по готовности
• Разделение CSS на блоки с их подгрузкой по требованию
• Для повторяющихся блоков используем ES6 String
• Для изображений обеспечиваем поэтапную загрузку
Управления загрузкой ресурсов
• Что есть в браузере - ничего. Возможно вы мне подскажете. ;-)
• Зато есть XMLHttpRequest. Но…
Что дальше?• Организация процесса:
• Минификация отдельно загружаемых блоков
• Сборка на CI
• Рефакторинг
• Тесты
• WebSocket
Обо мне.
• Зовут: Кучмин Илья • Twitter: @ikuchmin • GitHub: https://github.com/ikuchmin • Mail: [email protected]