Мастер-класс по производительности
(пересказ Дениса Мишунова с
HolyJS Moscow 2017)
Что такое performance?
Объективные метрики: скорость и размер контента, стоимость сайта
-
Кабель: https://goo.gl/vRQXoa
-
4G/LTE: https://goo.gl/kDbt5p
Субъективные метрики: фрустрация, концентрация, заинтересованность
-
Концентрация: http://goo.gl/kjTQZR
-
Фрустрация, заинтересованность: http://goo.gl/WPb3GU
Производительность:
Загрузка и Работа
Советы по измерению
- Chrome Dev Tools наше все
- ctrl+shift+p если не знаете где команда
- Выключать кэш
- Троттлить сеть и процессор (Moto G4, slow gprs)
- Всегда мерять в инкогнито
- Включать скриншоты
- Смотреть на красные квадратики и треугольники
- Смотреть, что вызывает layout/reflow тут: https://goo.gl/AGQuNH
Кроме DevTools
- webpagetest.org
- Google Lighthouse
- pingdom
- dareboost
Инструменты измерения из кода
- window.onload/DOMContentLoaded
- window.performance.now
- window.performance.timing
- window.performance.getEntries + PerformanceObservers
Performance Budget
Доклад Addy Osmani с Chome Dev Summit: https://goo.gl/ZmrtW2
5 секунд первая загрузка = 170КБ и 3.4с
Трюки с изображениями
Внезапно: есть формальные метрики
- Прогрессивные изображения
- Загрузить очень плохое изображение, подменить скриптом
- Элемент picture + mediaQueries и object-fit: cover
- 2 плана - резкий передний, размытый задний
- Снизить контраст, наложить css-фильтром
IntersectionObserver вместо onScroll
- Есть полифилл
- Сложноватое апи
- Асинхронный, умеет "проскакивать" пересечения
Шаманство с Resource Hints
Как работает в хроме: https://goo.gl/eMpKvR
Шаманство с Resource Hints
- Всегда используйте async/defer на скриптах
- можно поднимать приоритет изображений, при помощи preload as=image
- выдрать ссылки из iframe, preconnect ко всем доменам к ним
- stylesheet rel=preload as=style onload="this.rel=stylesheet"
- preload обязательно делать с crossorigin="crossorigin"
Препарация CSS
Есть инструменты выдирания в рантайме!
-
Penthouse
-
criticalCSS
-
Critical
Выстрели себе в ногу: ServiceWorker
- Только вторая загрузка! Первая будет замедлена
- Большие приколы с обновлением, легко сломать
Материалы
- Репозиторий с упражнениями: http://goo.gl/Nx1LKV
- Презентация Дениса: https://disk.skbkontur.ru/index.php/s/432b6Z88a2ZtMUs
- Мои заметки: http://bit.ly/2kLQuku
perf-at-holyjs
By Valeriy Kuzmin
perf-at-holyjs
- 638