Performance is one of the key factors in determining a product's user experience. It is very important that the site loads quickly, is responsive and interactive, and the content remains stable.
I want to share why you need to monitor application performance, talk about Web Vitals metrics and tools for measuring them.
I also want to tell you about examples of optimizations that can positively affect performance and what results it can bring.
16. Что делать?
Что мы знаем:
- Производительность это важно
- Есть какие-то метрики
Что нам нужно:
- Понять состояние на сейчас
- Решить существующие проблемы
- Настроить мониторинг
17. Lab data и field data
- Lab data - данные симуляции
загрузки страницы
- Field data - данные с
устройств пользователей
27. Предзагрузка наибольшего элемента
- С помощью HTML тега:
<link rel="preload" href="https://images.ua.prom.st/1185683070.jpg"as="image">
- С помощью HTTP header:
Link: </https://images.ua.prom.st/1185683070.jpg>;rel=preload; as=image
28. Предзагрузка наибольшего элемента
1. Понять, что является наибольшим элементом на странице
2. Предзагрузить
3. Убрать loading=`lazy` для картинок, если они являются LCP элементом
29. Предзагрузка наибольшего элемента
1. Понять, что является наибольшим элементом на странице
2. Предзагрузить
3. Убрать loading=`lazy` для картинок, если они являются LCP элементом
4. …………………
30. Предзагрузка наибольшего элемента
1. Понять, что является наибольшим элементом на странице
2. Предзагрузить
3. Убрать loading=`lazy` для картинок, если они являются LCP элементом
4. …………………
5. PROFIT
32. Использовать async/defer для скриптов
- defer - выполняется после того, как документ загружен и обработан:
<script defer src="https://code.jivosite.com/script/widget/id"></script>
- async - сильный и независимый:
<script async src="https://www.google-analytics.com/analytics.js
"></script>
33. Загрузка скрипта после load события
<script type="application/javascript">
function initReCaptcha() {
var scriptNode = document.createElement('script');
scriptNode.src = 'https://www.google.com/recaptcha/api.js?render=token';
scriptNode.defer = true;
document.body.appendChild(
scriptNode)
}
window.addEventListener(
'load', function() {
if ('requestIdleCallback' in window) {
window.requestIdleCallback(
initReCaptcha, { timeout: 1000 });
} else {
initReCaptcha();
}
});
</script>
34. Ранее подключение к домену
- preconnect - для наиболее важных ресурсов, которые точно будут
запрошены:
<link rel="preconnect" href="https://images.ua.prom.st">
- dns-prefetch - для доменов, которые могут быть запрошены:
<link rel="dns-prefetch" href="https://www.googletagmanager.com">
35. В общем и целом
- Раздавать статику с основного домена
- Использовать HTTP2 Server Push для отправки важных ресурсов до того
как браузер их запросит.
42. Code coverage
- CSS/JS coverage
- Ctrl + Shift + P → Show Coverage
- Settings → More tools → Coverage
43. Резюмируем
- Как улучшить LCP
- Предзагрузить наибольший контент и убрать loading=’lazy’
- async/defer атрибуты для third-party скриптов
- Раздавать статику с основного домена, использовать HTTP2 Sever Push для важных
ресурсов
- Как улучшить CLS
- Прыгающие картинки
- Скелетоны
- Как улучшить FID TBT
- Убирать неиспользуемый JS
- Избавляться от длинных задач
47. Автоматизация прогонов тестов
- Инструменты мониторинга:
- SpeedCurve для регулярных тестов и SpeedCurve API + Slack
- web-vitals.js + Google Analytics + web-vitals-report.web.app и DataStudio
- CrUX дашборд
- Немного о Search Console
48. SpeedCurve
- Автоматические прогоны
- Данные Lighthouse + WebPageTest
- Performance budget
- Сравнение разных версий приложения
- Сравнение конкурентов
- LUX - Live Users Experience
- Платный (1 месяц бесплатный)
49. Как интегрироваться
- Добавить проект (и конкурентов, если нужно)
- Добавить ссылки для тестов (разбить по типам страниц)
- Выбрать регулярность прогонов тестов и устройства
50.
51.
52. SpeedCurve API
- Позволяет получать
результаты тестов в формате
JSON
- Кейс использования -
генерация сводки прогонов
тестов в чатик слака
56. Web Vitals Report
Позволяет сравнивать разные сегменты:
- Desktop Traffic vs Mobile Traffic
- New Users vs. Returning Users
- Bounced Sessions vs. Non-bounce
Sessions
- Converters vs. Non-converters
- Custom