Core Web Vitals: измерение и улучшение веб-производительности
Ваш сайт загружается, но пользователи всё равно уходят. Медленные взаимодействия раздражают посетителей, и поисковые системы это замечают. Core Web Vitals — это метрики Google для оценки реального пользовательского опыта: Largest Contentful Paint (LCP), Interaction to Next Paint (INP) и Cumulative Layout Shift (CLS). В этом руководстве мы покажем, как точно их измерять и улучшать с помощью практических методов на уровне кода.
Что такое Core Web Vitals?
Core Web Vitals — это набор метрик, количественно оценивающих ключевые аспекты пользовательского опыта:
- LCP измеряет скорость загрузки. Он отмечает время, когда самый крупный элемент контента (изображение, текстовый блок, видео) становится видимым. Цель — ≤ 2,5 секунды.
- INP измеряет интерактивность. Он отслеживает задержку всех взаимодействий (клики, касания, нажатия клавиш) и сообщает о худшем из них. Цель — ≤ 200 миллисекунд.
- CLS измеряет визуальную стабильность. Он оценивает неожиданные сдвиги макета во время загрузки. Цель — ≤ 0,1.
Эти метрики являются частью сигнала Page Experience от Google, но что важнее — они отражают реальное раздражение пользователей. Их улучшение приносит пользу как SEO, так и конверсии.
Как измерять Core Web Vitals
Вам нужны как лабораторные, так и полевые данные. Лабораторные инструменты моделируют условия; полевые данные поступают от реальных пользователей.
Лабораторные инструменты
- Lighthouse (в Chrome DevTools или CI) предоставляет снимок с возможностями для улучшения.
- PageSpeed Insights объединяет лабораторные и полевые данные из Chrome User Experience Report (CrUX).
- WebPageTest предлагает расширенные сценарии и раскадровки.
Полевые инструменты
- Chrome UX Report (CrUX) показывает агрегированные данные реальных пользователей для вашего origin.
- Библиотека web-vitals позволяет собирать метрики от реальных пользователей и отправлять их в вашу аналитику.
- Search Console сообщает о статусе Core Web Vitals для вашего сайта.
Начните с проверки PageSpeed Insights для ключевых страниц. Затем настройте мониторинг реальных пользователей с помощью библиотеки web-vitals, чтобы отслеживать производительность с течением времени.
Улучшение LCP
LCP часто является наиболее важной метрикой для исправления. Самый крупный элемент обычно представляет собой hero-изображение или большой текстовый блок.
1. Оптимизируйте критический путь
- Сократите время ответа сервера (TTFB) с помощью кэширования, CDN и эффективного серверного кода.
- Устраните ресурсы, блокирующие рендеринг: встройте критический CSS, отложите некритический CSS и JavaScript.
- Предзагрузите LCP-изображение:
<link rel="preload" as="image" href="#">.
2. Оптимизируйте изображения
- Используйте современные форматы, такие как WebP или AVIF.
- Отдавайте адаптивные изображения с помощью
srcsetиsizes. - Сжимайте изображения без видимой потери качества. Для быстрого сжатия попробуйте наш Image Compressor.
3. Улучшите ответ сервера
- Используйте CDN для глобального кэширования статических ресурсов.
- Включите сжатие Brotli или gzip.
- Оптимизируйте запросы к базе данных и используйте серверное кэширование.
Пример: предзагрузка и fetchpriority для LCP-изображения:
<link rel="preload" as="image" href="#" fetchpriority="high">
<img src="#" alt="Hero" width="1200" height="600" fetchpriority="high">
Улучшение INP
INP измеряет, насколько быстро ваша страница реагирует на ввод пользователя. Высокий INP означает медленные взаимодействия.
1. Разбивайте длинные задачи
- Используйте
setTimeout,requestIdleCallbackилиscheduler.yield, чтобы уступить главному потоку. - Избегайте длительных JavaScript-функций; разбивайте их на более мелкие части.
2. Оптимизируйте обработчики событий
- Применяйте debounce или throttle для частых событий (scroll, resize, input).
- Используйте пассивные слушатели событий для touch и wheel событий.
- Минимизируйте обновления DOM внутри обработчиков.
3. Сократите выполнение JavaScript
- Разделяйте код и лениво загружайте некритический JavaScript.
- Удалите неиспользуемые зависимости и полифилы.
- Используйте веб-воркеры для тяжёлых вычислений.
Пример: уступка главному потоку в длинной задаче:
async function processLargeArray(items) {
for (let i = 0; i < items.length; i++) {
// Process item
if (i % 50 === 0) {
await new Promise(resolve => setTimeout(resolve, 0));
}
}
}
Улучшение CLS
CLS измеряет неожиданные сдвиги макета. Распространённые причины: изображения без размеров, реклама, встраиваемые элементы и динамически внедряемый контент.
1. Всегда задавайте размеры
- Указывайте атрибуты
widthиheightдля изображений и видео. - Используйте CSS
aspect-ratioдля адаптивных контейнеров.
2. Резервируйте место для динамического контента
- Используйте плейсхолдеры или скелетон-экраны для рекламы и встраиваемых элементов.
- Избегайте вставки контента выше существующего, если это не реакция на действие пользователя.
3. Оптимизируйте загрузку шрифтов
- Используйте
font-display: swap, чтобы избежать невидимого текста, но учитывайте возможные сдвиги макета. - Предзагружайте ключевые шрифты, чтобы сократить задержки подмены.
Пример: резервирование места с помощью aspect-ratio:
.video-container {
aspect-ratio: 16 / 9;
width: 100%;
}
Инструменты и рабочий процесс
Интегрируйте проверки производительности в ваш процесс разработки:
- Запускайте Lighthouse в CI (например, GitHub Actions), чтобы ловить регрессии.
- Используйте библиотеку web-vitals для отправки полевых данных в вашу аналитику.
- Отслеживайте CrUX и Search Console для тенденций реальных пользователей.
- Тестируйте на реальных устройствах, особенно на мобильных телефонах среднего класса.
Помните: производительность — это функция. Относитесь к ней как к любой другой метрике качества.
FAQ
Каковы текущие пороги для Core Web Vitals?
LCP: хорошо ≤ 2,5 с, требует улучшения ≤ 4,0 с. INP: хорошо ≤ 200 мс, требует улучшения ≤ 500 мс. CLS: хорошо ≤ 0,1, требует улучшения ≤ 0,25. Эти пороги основаны на данных реальных пользователей.
Как часто нужно измерять Core Web Vitals?
Непрерывно отслеживайте полевые данные через такие инструменты, как CrUX, и ваш собственный RUM. Запускайте лабораторные тесты при каждом значительном изменении кода и как минимум ежемесячно для ключевых страниц.
Можно ли улучшить Core Web Vitals без разработчика?
Некоторые исправления, такие как сжатие изображений и кэширование, можно выполнить с помощью плагинов или настроек CDN. Однако более глубокая оптимизация (разделение кода, критический CSS) обычно требует участия разработчика.
Готовы оптимизировать изображения для лучшего LCP? Попробуйте наш бесплатный Image Compressor, чтобы уменьшить размер файлов без потери качества.