Библиотека Lighthouse предоставляет мощный инструмент для автоматизированного анализа веб-страниц, позволяя измерять производительность, доступность, SEO и другие параметры. Важной частью работы с Lighthouse является понимание типов данных, которые возвращаются при его запуске, так как правильная интерпретация результатов позволяет эффективно использовать API и интегрировать Lighthouse в автоматизированные процессы.
При вызове Lighthouse через Node.js или через программный API, основной результат возвращается в виде объекта JavaScript. Этот объект включает в себя всю информацию об аудите страницы, включая метрики производительности, доступности, SEO, прогрессивного веб-приложения (PWA) и лучших практик.
Структура объекта отчета включает следующие ключевые поля:
lhr (Lighthouse Result) – основной
объект с результатами аудита:
categories – категории аудита (performance,
accessibility, best-practices, seo, pwa).audits – подробные проверки с результатами, баллами и
рекомендациями.configSettings – настройки, применяемые при запуске
аудита.fetchTime – временная метка начала аудита.finalUrl – URL страницы после всех редиректов.Каждый элемент внутри audits представляет собой объект с
полями:
id – уникальный идентификатор аудита.title – краткое описание проверки.description – подробное описание и рекомендации.score – числовое значение оценки (от 0 до 1, либо
null если недоступно).numericValue – числовая метрика, например, время
загрузки.displayValue – текстовое представление метрики для
отображения.Lighthouse может возвращать отчёт не только как объект JavaScript, но и в виде готовых файлов:
Пример генерации JSON и HTML отчета через Node.js:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
async function runLighthouse(url) {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {output: ['json', 'html'], port: chrome.port};
const runnerResult = await lighthouse(url, options);
const reportJson = runnerResult.report[0]; // JSON
const reportHtml = runnerResult.report[1]; // HTML
await chrome.kill();
return {reportJson, reportHtml};
}
Некоторые аудиты возвращают строго числовые значения
(numericValue) или логические
(scoreDisplayMode). Примеры:
numericValue – например, время до
полной загрузки страницы (first-contentful-paint в
миллисекундах).score – оценка в диапазоне 0–1, где 1
соответствует идеальному результату.scoreDisplayMode – тип отображения
оценки (numeric, binary,
informative).Эти значения позволяют программно сортировать, фильтровать и сравнивать страницы по метрикам производительности или доступности.
Категории (categories) содержат сводные оценки по
группам аудитов. Каждая категория имеет следующие ключи:
id – идентификатор категории (performance,
accessibility и др.).title – название категории.score – агрегированная оценка по всем аудитам
категории.auditRefs – массив ссылок на отдельные аудиты, входящие
в категорию.Пример структуры категории:
"categories": {
"performance": {
"id": "performance",
"title": "Performance",
"score": 0.92,
"auditRefs": [
{"id": "first-contentful-paint", "weight": 3, "group": "metrics"},
{"id": "speed-index", "weight": 4, "group": "metrics"}
]
}
}
Анализируя auditRefs и score, можно выявить
узкие места и определить, какие метрики требуют оптимизации.
Внутри аудитов могут присутствовать массивы элементов с дополнительной информацией:
details.items – массив конкретных
проблем или элементов страницы, например, неиспользуемые CSS-правила или
медиа-ресурсы.details.overallSavingsMs – суммарная
экономия времени после оптимизации.details.headings – массив заголовков
для аудита структуры страницы.Вложенные объекты и массивы позволяют получать подробные, конкретные данные для анализа каждой метрики.
.json,
.html) или в stdout, что удобно для быстрых проверок.runnerResult.lhr) для дальнейшей обработки в коде.lhr из Node API,
что позволяет унифицировать обработку результатов.Lighthouse возвращает ошибки в двух видах:
Ошибки выполнения аудита:
error внутри конкретного аудита с описанием
причины сбоя.{"id": "first-contentful-paint", "score": null, "error": "Page load failed"}Ошибки запуска:
Error объекта,
содержащего message и stack.Эта структура позволяет программно обрабатывать сбои и корректно информировать пользователя о причинах неполного отчета.