Lighthouse — это библиотека для анализа производительности, доступности и SEO веб-приложений. Помимо генерации отчётов, её можно интегрировать с системами хранения данных, чтобы сохранять результаты аудита для дальнейшего анализа, визуализации или построения метрик.
Перед началом работы с экспортом данных необходимо убедиться, что проект правильно настроен. Установка Lighthouse через npm выглядит следующим образом:
npm install --save lighthouse
Для работы с базой данных потребуется выбрать драйвер для конкретной СУБД. Например, для PostgreSQL:
npm install pg
или для MongoDB:
npm install mongodb
После установки зависимостей подключение к базе данных производится стандартным способом через клиентский API выбранной СУБД.
Lighthouse предоставляет метод lighthouse(url, options),
который возвращает промис с объектом отчёта. Пример запуска аудита:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
async function runLighthouse(url) {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {port: chrome.port, output: 'json'};
const runnerResult = await lighthouse(url, options);
await chrome.kill();
return runnerResult.lhr; // LHR (Lighthouse Result)
}
Ключевой объект для экспорта — runnerResult.lhr. Он
содержит детализированные метрики производительности, SEO,
доступности и PWA.
Для хранения в базу данных необходимо выделить ключевые поля или сериализовать весь объект JSON. Например, для PostgreSQL можно использовать JSONB:
const reportData = JSON.stringify(lhr); // lhr — объект отчёта
await client.query(
'INS ERT IN TO lighthouse_reports(url, report) VALUES($1, $2)',
[url, reportData]
);
В MongoDB объекты JSON сохраняются напрямую:
const collection = db.collection('lighthouse_reports');
await collection.insertOne({url: url, report: lhr, timestamp: new Date()});
Важно учитывать, что отчёты Lighthouse могут быть
объёмными. Для реляционных баз данных полезно выделять
отдельные поля для индексации, такие как url,
date, performanceScore,
accessibilityScore:
const summary = {
url: lhr.finalUrl,
timestamp: new Date(),
performanceScore: lhr.categories.performance.score,
accessibilityScore: lhr.categories.accessibility.score,
seoScore: lhr.categories.seo.score
};
await client.query(
'INS ERT IN TO lighthouse_summary(url, timestamp, performance, accessibility, seo) VALUES($1, $2, $3, $4, $5)',
[summary.url, summary.timestamp, summary.performanceScore, summary.accessibilityScore, summary.seoScore]
);
Такой подход позволяет быстро агрегировать данные и строить отчёты без необходимости обрабатывать весь JSON.
Для регулярного аудита можно использовать скрипты, которые
запускаются по расписанию через cron или планировщик задач
Node.js. Например:
const urls = ['https://example.com', 'https://example.org'];
urls.forEach(async (url) => {
const lhr = await runLighthouse(url);
const summary = {
url: lhr.finalUrl,
timestamp: new Date(),
performanceScore: lhr.categories.performance.score
};
await collection.insertOne(summary);
});
При большом объёме данных важно учитывать параллельность запросов и ограничения базы данных. Для этого используют очереди или пул соединений.
После экспорта отчетов рекомендуется создавать индексы по полям
url, timestamp и
categories.*.score. Это позволяет быстро фильтровать и
агрегировать данные:
CRE ATE INDEX idx_url ON lighthouse_summary(url);
CRE ATE INDEX idx_timestamp ON lighthouse_summary(timestamp);
CRE ATE INDEX idx_performance ON lighthouse_summary(performance);
Для визуализации можно подключать BI-инструменты напрямую к базе данных или формировать API, которое возвращает агрегированные данные.
Экспорт данных Lighthouse в базы данных позволяет не только сохранять результаты аудита, но и строить историю метрик, анализировать тенденции и автоматизировать процесс мониторинга производительности веб-приложений.