Lighthouse — это инструмент с открытым исходным кодом для автоматизированного аудита веб-страниц. Он позволяет измерять производительность, доступность, SEO и лучшие практики работы сайта. Основным преимуществом библиотеки является возможность интеграции в JavaScript-проекты, что делает её удобной для создания собственных аналитических платформ.
Lighthouse работает по принципу запуска аудитов в браузере или через
Node.js. Для Node.js доступен пакет lighthouse, который
предоставляет API для программного вызова всех функций.
import lighthouse from 'lighthouse';
import chromeLauncher from 'chrome-launcher';
async function runLighthouse(url, options = {}, config = null) {
const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'] });
options.port = chrome.port;
const results = await lighthouse(url, options, config);
await chrome.kill();
return results.lhr; // Lighthouse Result
}
Ключевой момент: результат аудита (lhr)
содержит структурированные данные по всем категориям и метрикам, включая
детальные рекомендации.
Объект lhr имеет следующие важные свойства:
categories — основные категории аудита:
performanceaccessibilitybest-practicesseopwa (если применимо)audits — детальные проверки с оценками, описанием
проблем и рекомендациями.
fetchTime — время создания отчёта.
finalUrl — URL, который был
проанализирован.
Каждый элемент audits содержит:
id — уникальный идентификатор проверки.title — название проверки.description — подробное описание проблемы.score — оценка от 0 до 1.details — дополнительные данные, например, список
медленных ресурсов.Для создания кастомной аналитической платформы на основе Lighthouse используется возможность кастомизации конфигурации. Конфигурация задаётся объектом, который определяет:
Пример конфигурации:
const config = {
extends: 'lighthouse:default',
settings: {
onlyCategories: ['performance', 'seo'],
maxWaitForFcp: 15000,
emulatedFormFactor: 'mobile'
},
audits: [
'first-contentful-paint',
'largest-contentful-paint',
'seo-meta-description'
]
};
Важная особенность — можно отключать ненужные проверки, чтобы ускорить аудит и уменьшить объём данных для последующего анализа.
Для аналитической платформы важна не только оценка сайта, но и
сбор метрик в удобном формате. Например, можно
преобразовать lhr.audits в JSON-структуру с ключевыми
метриками:
function extractMetrics(lhr) {
const metrics = {
performanceScore: lhr.categories.performance.score,
fcp: lhr.audits['first-contentful-paint'].numericValue,
lcp: lhr.audits['largest-contentful-paint'].numericValue,
seoScore: lhr.categories.seo.score
};
return metrics;
}
Эти данные можно сохранять в базу данных, отображать на дашборде или использовать для генерации регулярных отчётов.
Lighthouse легко сочетается с:
Пример интеграции с базой данных:
import { MongoClient } from 'mongodb';
async function saveMetrics(metrics) {
const client = new MongoClient('mongodb://localhost:27017');
await client.connect();
const db = client.db('analytics');
await db.collection('lighthouse_reports').insertOne(metrics);
await client.close();
}
Пользовательские аудиты Можно создавать
собственные проверки, реализуя интерфейс Audit с методами
meta и audit(). Это позволяет отслеживать
нестандартные показатели, специфичные для проекта.
Логирование и трассировка Lighthouse собирает данные о производительности сети, JavaScript и рендеринга страницы, которые можно использовать для детального анализа проблемных точек.
Форматы отчётов