Lighthouse — это инструмент для автоматического аудита веб-страниц, предоставляющий детальные отчёты по производительности, доступности, SEO и лучшим практикам. Одним из ключевых аспектов работы с Lighthouse является получение и обработка результатов аудита, что позволяет интегрировать отчёты в CI/CD-процессы, сохранять их в различных форматах и использовать для последующего анализа.
Lighthouse поддерживает несколько форматов вывода результатов:
JSON — структурированный формат, который
идеально подходит для программной обработки и интеграции с другими
инструментами. Основной объект содержит категории аудита
(categories), подробные метрики (audits) и
информацию о проведённом запуске (lhrVersion,
fetchTime).
HTML — визуальный отчет, удобный для ручного анализа. HTML-отчёт можно сохранить на диск и открыть в браузере для просмотра всех рекомендаций.
CSV и другие кастомные форматы — могут быть получены путем преобразования JSON-результатов с помощью скриптов.
Пример вызова Lighthouse с указанием формата JSON через Node.js:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
(async () => {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {output: 'json', port: chrome.port};
const runnerResult = await lighthouse('https://example.com', options);
console.log(runnerResult.lhr); // JSON объект с результатами аудита
await chrome.kill();
})();
Здесь runnerResult.lhr содержит Lighthouse
Result, который является основной структурой данных для
анализа.
Объект lhr включает следующие ключевые разделы:
categories — сводные оценки по
направлениям аудита:
performanceaccessibilitybest-practicesseopwa (Progressive Web App)Каждая категория имеет оценку от 0 до 1, которую можно умножить на 100 для отображения в процентах.
audits — детализированные проверки.
Каждая проверка содержит:
id — идентификатор аудитаtitle — название проверкиdescription — описание, почему проверка важнаscore — оценка выполненияdetails — дополнительные данные, например список
ресурсов, которые нужно оптимизироватьconfigSettings — настройки,
использованные при запуске, включая:
emulatedFormFactor — мобильная или десктопная
эмуляцияthrottlingMethod — метод ограничения скорости сети и
CPUfetchTime — время проведения
аудита.
userAgent и
environment — информация о среде запуска,
включая версию Chrome и Lighthouse.
Результаты можно сохранить на диск и использовать для последующего анализа:
const fs = require('fs');
fs.writeFileSync('lighthouse-report.json', JSON.stringify(runnerResult.lhr, null, 2));
Для генерации HTML-отчета используется модуль
lighthouse/report/html:
const reportGenerator = require('lighthouse/report/generator/report-generator');
const html = reportGenerator.generateReport(runnerResult.lhr, 'html');
fs.writeFileSync('report.html', html);
Такой отчет можно открывать в браузере и использовать как документ с рекомендациями для оптимизации сайта.
JSON-структура предоставляет возможность автоматической обработки:
const performanceScore = runnerResult.lhr.categories.performance.score * 100;
console.log(`Performance: ${performanceScore}`);
const audits = runnerResult.lhr.audits;
for (const key in audits) {
if (audits[key].score < 1) {
console.log(`${audits[key].title}: ${audits[key].score}`);
}
}
const seoAudits = Object.values(runnerResult.lhr.audits)
.filter(audit => audit.id.startsWith('seo') && audit.score < 1);
seoAudits.forEach(audit => console.log(audit.title, audit.description));
Lighthouse часто используется для контроля качества страниц в автоматических пайплайнах:
Пример проверки на минимальный порог:
const minScore = 0.9; // 90%
if (runnerResult.lhr.categories.performance.score < minScore) {
throw new Error('Performance score below threshold');
}
Для комплексного аудита можно запускать Lighthouse последовательно по списку URL и собирать результаты в массив:
const urls = ['https://example.com', 'https://example.com/about'];
const results = [];
for (const url of urls) {
const runnerResult = await lighthouse(url, options);
results.push(runnerResult.lhr);
}
Далее эти результаты можно агрегировать, строить графики и отчеты для всей веб-платформы.