Современные веб-приложения должны не просто работать — они должны летать. И речь идёт не только о скорости загрузки, но и о том, насколько быстро пользователь может начать взаимодействовать с сайтом. Именно поэтому метрики Core Web Vitals стали настолько важными для разработчиков.
В этой статье мы разберём, как внедрить мониторинг LCP (Largest Contentful Paint) и FID (First Input Delay) в процесс непрерывной интеграции и развёртывания GatsbyJS-приложения. Да, звучит немного пугающе, но давайте разбираться постепенно.
Почему это важно?
Представьте, что вы заходите в кафе. Что вас больше порадует — мгновенно получить меню и возможность сделать заказ или долго ждать, пока официант соизволит подойти? То же самое и с сайтами: пользователи хотят видеть контент быстро и иметь возможность взаимодействовать с ним без задержек.
LCP показывает, как быстро загружается самый большой элемент на странице, видимый пользователю. FID измеряет время между первым взаимодействием пользователя с сайтом и моментом, когда браузер может начать обрабатывать это взаимодействие.
Подготовка к внедрению
Прежде всего нам понадобится настроенный проект на GatsbyJS и система CI/CD. Давайте начнём с базовой конфигурации:
// gatsby-config.js
module.exports = {
plugins: [
'gatsby-plugin-perf-metrics',
// другие плагины
]
}
Настройка измерения метрик
Для измерения LCP и FID мы можем использовать web-vitals — библиотеку от Google:
import {getLCP, getFID} from 'web-vitals';
getLCP(metric => {
// Отправляем данные в систему мониторинга
console.log('LCP:', metric.value);
});
getFID(metric => {
console.log('FID:', metric.value);
});
Интеграция с CI/CD
А теперь самое интересное! Давайте создадим скрипт, который будет проверять метрики во время сборки:
// performance-check.js
const puppeteer = require('puppeteer');
async function checkMetrics() {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Внедряем код для измерения метрик
await page.evaluateOnNewDocument(() => {
window.performanceMetrics = {};
// Код измерения LCP и FID
});
await page.goto('http://localhost:8000');
// Ждём сбора метрик
await page.waitForFunction(() =>
window.performanceMetrics.lcp &&
window.performanceMetrics.fid
);
const metrics = await page.evaluate(() =>
window.performanceMetrics
);
await browser.close();
return metrics;
}
Автоматизация проверок
Теперь добавим этот скрипт в наш CI/CD пайплайн. Например, для GitHub Actions:
yamlname: Performance Check
on: [push]
jobs:
perf-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: npm install
- name: Build site
run: npm run build
- name: Check performance
run: node performance-check.js
Анализ результатов
Как понять, что наши метрики в норме? Google рекомендует следующие значения:
- LCP: меньше 2.5 секунд
- FID: меньше 100 миллисекунд
В нашем CI/CD процессе мы можем установить эти значения как пороговые:
const THRESHOLD_LCP = 2500;
const THRESHOLD_FID = 100;
if (metrics.lcp > THRESHOLD_LCP || metrics.fid > THRESHOLD_FID) {
process.exit(1); // Прерываем процесс сборки
}
Оптимизация и улучшение
Сбор метрик — это только начало. Что делать, если показатели не радуют? Вот несколько советов:
1. Оптимизируйте изображения и шрифты
2. Минимизируйте JavaScript
3. Используйте кэширование
4. Внедрите ленивую загрузку
5. Оптимизируйте критический путь рендеринга
Мониторинг в production
Важно следить за метриками не только при разработке, но и в боевом окружении. Можно использовать сервисы вроде Google Analytics или создать собственную систему мониторинга:
function sendToAnalytics(metric) {
const body = JSON.stringify({
name: metric.name,
value: metric.value,
page: window.location.pathname
});
navigator.sendBeacon('/analytics', body);
}
Работа с регрессиями
Иногда новые фичи могут ухудшить производительность. Поэтому важно настроить систему оповещений:
// alert-system.js
function checkRegression(currentMetrics, previousMetrics) {
const regressionThreshold = 0.1; // 10%
if (currentMetrics.lcp > previousMetrics.lcp * (1 + regressionThreshold)) {
notify('LCP regression detected!');
}
}
Заключение
Внедрение мониторинга LCP и FID в CI/CD пайплайн — это инвестиция в качество вашего приложения. Конечно, настройка может занять время, но результат того стоит: довольные пользователи, лучшие позиции в поиске и меньше головной боли при запуске новых фич.
Помните, что это не разовая задача, а постоянный процесс улучшения. Регулярно проверяйте метрики, анализируйте тренды и оптимизируйте там, где это необходимо. И да, иногда даже небольшие изменения могут дать заметный результат!
А вы уже следите за Core Web Vitals в своих проектах?