CrUX (Chrome User Experience Report) представляет собой набор данных о реальном пользовательском опыте сайтов, собранных в масштабах всего Интернета. Эти данные включают метрики производительности, интерактивности и визуальной стабильности, полученные на устройствах пользователей Chrome. В контексте Lighthouse использование CrUX позволяет анализировать реальный опыт посетителей сайта, а не только результаты синтетического тестирования.
Lighthouse использует CrUX для расчета показателей, которые непосредственно влияют на пользовательский опыт:
Эти метрики получают значения не из локальных измерений, а из CrUX API, что позволяет формировать рекомендации на основе реального поведения пользователей.
Для интеграции CrUX необходимо использовать официальный API:
import fetch from 'node-fetch';
const url = 'https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=YOUR_API_KEY';
const body = {
"url": "https://example.com",
"formFactor": "PHONE"
};
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(body)
})
.then(res => res.json())
.then(data => console.log(data.record.metrics));
Объяснение ключевых моментов:
PHONE, DESKTOP, TABLET). Метрики
зависят от устройства.Lighthouse предоставляет возможность объединить синтетические тесты с CrUX метриками. Для этого применяются следующие шаги:
const lighthouseConfig = {
extends: 'lighthouse:default',
settings: {
onlyCategories: ['performance', 'accessibility'],
useCruxData: true
}
};
Lighthouse автоматически добавляет данные в секцию “Field Data”, где отображаются реальные показатели с пользователях, включая медиану и перцентили.
CrUX предоставляет метрики с распределением по перцентилям:
Пример обработки p75 для LCP:
const lcpP75 = data.record.metrics.lcp.p75;
if (lcpP75 <= 2500) {
console.log('LCP в норме');
} else {
console.log('LCP требует оптимизации');
}
Использование p75 позволяет идентифицировать опыт большинства пользователей, что является более реалистичным индикатором производительности, чем отдельные измерения.
Для интеграции в CI/CD рекомендуется:
Пример:
import fs from 'fs';
async function fetchCrux(url) {
const res = await fetch('https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=YOUR_API_KEY', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({url, formFactor: 'PHONE'})
});
const data = await res.json();
fs.writeFileSync(`crux-${url.replace(/https?:\/\//, '')}.json`, JSON.stringify(data, null, 2));
}
Эта методика позволяет создавать глубокие отчеты, учитывающие реальные условия пользователей, что значительно повышает точность оценки производительности и UX сайта.