Lighthouse — это инструмент для аудита веб-приложений и сайтов, позволяющий анализировать производительность, доступность, SEO и лучшие практики. Одним из ключевых способов обработки и хранения результатов аудита является экспорт данных в CSV, что позволяет интегрировать результаты в аналитические панели или автоматизировать отчёты.
Перед экспортом в CSV необходимо сгенерировать отчёт в формате JSON, так как Lighthouse напрямую не предоставляет полноценного CSV-экспорта. Пример использования через Node.js:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
(async () => {
const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'] });
const options = { logLevel: 'info', output: 'json', port: chrome.port };
const url = 'https://example.com';
const runnerResult = await lighthouse(url, options);
// Получаем отчёт в формате JSON
const reportJson = runnerResult.report;
console.log(reportJson);
await chrome.kill();
})();
В reportJson содержатся все метрики аудита:
производительность, доступность, SEO, лучшие практики, прогрессивные
веб-приложения.
JSON-отчёт имеет иерархическую структуру:
categories — основные категории аудита
(performance, accessibility, seo,
best-practices, pwa).audits — детализированные показатели в каждой
категории.score — числовая оценка (0–1).displayValue — человекочитаемое значение метрики.details — дополнительные данные (например, таблицы
ресурсов, аудит изображений).Для экспорта в CSV необходимо обрабатывать объекты из
audits и categories, трансформируя их в
плоскую структуру строк и столбцов.
Для удобного экспорта можно использовать библиотеку
json2csv:
const { Parser } = require('json2csv');
const fs = require('fs');
const audits = Object.values(JSON.parse(reportJson).audits);
const csvFields = ['id', 'title', 'score', 'displayValue'];
const parser = new Parser({ fields: csvFields });
const csv = parser.parse(audits);
fs.writeFileSync('lighthouse-report.csv', csv);
id — уникальный идентификатор аудита.title — название показателя.score — числовой результат.displayValue — человекочитаемый результат.Такой подход позволяет экспортировать только ключевые
метрики. При необходимости можно добавить дополнительные поля
из details, например, URL ресурсов или размеры
изображений.
Многие аудиты содержат массивы в поле details.items. Для
их корректного экспорта можно делать вложенные строки или разделять
элементы символом ;:
const detailedAudits = audits.map(audit => {
let urls = '';
if (audit.details && audit.details.items) {
urls = audit.details.items.map(item => item.url || '').join('; ');
}
return {
id: audit.id,
title: audit.title,
score: audit.score,
displayValue: audit.displayValue,
urls: urls
};
});
const detailedCsv = parser.parse(detailedAudits);
fs.writeFileSync('lighthouse-detailed-report.csv', detailedCsv);
Это особенно полезно для аудитов ресурсов с низкой производительностью или больших изображений.
Для регулярных отчётов удобно создавать скрипты, которые запускают Lighthouse, конвертируют JSON в CSV и сохраняют файлы с временной меткой:
const date = new Date().toISOString().replace(/[:.]/g, '-');
fs.writeFileSync(`lighthouse-report-${date}.csv`, detailedCsv);
Так можно вести историю изменений метрик сайта, отслеживать улучшения и сравнивать показатели между версиями.
Экспорт в CSV не всегда требует всех аудитов. Для выборочного экспорта можно фильтровать категории или конкретные аудиты:
const selectedAudits = audits.filter(audit => ['first-contentful-paint', 'speed-index'].includes(audit.id));
Это позволяет сосредоточиться на ключевых метриках производительности, избегая перегрузки отчёта.
После экспорта CSV можно подключить данные к:
Структурированные CSV-данные упрощают построение графиков и автоматическое выявление проблемных страниц.