Экспорт в базы данных

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, которое возвращает агрегированные данные.

Рекомендации по хранению больших отчётов

  • Использовать JSONB для PostgreSQL или коллекции MongoDB для хранения полного объекта LHR.
  • Для аналитики выделять сводные показатели в отдельные таблицы или документы.
  • Очищать старые отчёты или переносить их в архив при достижении лимита объёма.
  • Настроить периодическую проверку целостности данных и индексов для обеспечения производительности запросов.

Экспорт данных Lighthouse в базы данных позволяет не только сохранять результаты аудита, но и строить историю метрик, анализировать тенденции и автоматизировать процесс мониторинга производительности веб-приложений.