Для работы с Lighthouse в среде JavaScript можно использовать пакет
lighthouse, который доступен через npm. Установка
выполняется командой:
npm install -g lighthouse
Для использования в проекте как зависимости:
npm install --save-dev lighthouse
После установки можно подключить библиотеку в Node.js проект:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
Для корректного запуска необходим отдельный экземпляр Chrome,
управляемый через chrome-launcher. Это позволяет Lighthouse
работать в изолированном окружении и собирать метрики
производительности, доступности, SEO и других категорий.
Для проведения аудита необходимо:
chrome-launcher.lighthouse.Пример запуска:
(async () => {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {logLevel: 'info', output: 'json', port: chrome.port};
const runnerResult = await lighthouse('https://example.com', options);
console.log('Lighthouse score:', runnerResult.lhr.categories.performance.score);
await chrome.kill();
})();
Ключевые моменты:
chromeFlags: ['--headless'] запускает Chrome без
интерфейса.output: 'json' позволяет получать структурированные
данные для последующего анализа.runnerResult.lhr.categories содержит результаты по
основным категориям: performance,
accessibility, best-practices,
seo, pwa.Lighthouse поддерживает кастомизацию через конфигурационные файлы. Конфигурация включает:
Пример конфигурации:
const config = {
extends: 'lighthouse:default',
settings: {
emulatedFormFactor: 'desktop',
throttlingMethod: 'simulate',
},
categories: {
performance: {enabled: true},
accessibility: {enabled: true},
seo: {enabled: false}
}
};
Передача конфигурации при запуске:
const runnerResult = await lighthouse('https://example.com', options, config);
Lighthouse идеально подходит для сбора метрик для последующей визуализации в Grafana. Для этого необходимо:
Пример экспорта:
const fs = require('fs');
fs.writeFileSync('lighthouse-report.json', JSON.stringify(runnerResult.lhr, null, 2));
Метрики, которые чаще всего визуализируют:
Для регулярного мониторинга можно настроить скрипт Node.js с планировщиком (cron) или CI/CD пайплайном. Основные шаги:
Пример скрипта для cron:
const urls = ['https://example.com', 'https://example.org'];
urls.forEach(async (url) => {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {port: chrome.port, output: 'json'};
const result = await lighthouse(url, options);
fs.writeFileSync(`reports/${url.replace(/https?:\/\//,'')}.json`, JSON.stringify(result.lhr, null, 2));
await chrome.kill();
});
После загрузки метрик в базу данных для Grafana:
Советы по построению дашбордов: