Активация и использование

Для начала работы с Lighthouse в Node.js необходимо установить пакет через npm:

npm install -g lighthouse

После установки Lighthouse становится доступен как CLI-инструмент. Для программного использования можно подключить библиотеку напрямую:

const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');

Использование chrome-launcher позволяет автоматически запускать экземпляр Chrome для анализа страниц.


Запуск анализа страницы

Основной способ инициировать проверку сайта — вызов функции lighthouse(url, options, config). Здесь:

  • url — адрес веб-страницы для анализа.
  • options — объект с параметрами запуска.
  • config — необязательная кастомная конфигурация аудита.

Пример минимального запуска:

(async () => {
  const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
  const options = {port: chrome.port, output: 'html'};
  const runnerResult = await lighthouse('https://example.com', options);

  console.log('Lighthouse score:', runnerResult.lhr.categories.performance.score * 100);

  await chrome.kill();
})();

Ключевые моменты:

  • chromeFlags: ['--headless'] запускает Chrome в безголовом режиме.
  • runnerResult.lhr содержит объект отчёта с детальными метриками.
  • categories включает показатели: performance, accessibility, best-practices, seo, pwa.

Настройка параметров запуска

Объект options позволяет гибко настраивать поведение Lighthouse:

const options = {
  port: chrome.port,
  output: 'json',
  logLevel: 'info',
  onlyCategories: ['performance', 'seo'],
  emulatedFormFactor: 'mobile',
  throttlingMethod: 'simulate',
};
  • output — формат отчёта: html, json, csv.
  • logLevel — уровень логирования: silent, error, info, verbose.
  • onlyCategories — ограничение аудитов выбранными категориями.
  • emulatedFormFactor — эмуляция устройства: mobile, desktop.
  • throttlingMethod — метод ограничения скорости: simulate, devtools.

Кастомизация конфигурации аудита

Lighthouse поддерживает собственные конфигурации, которые определяют, какие аудиты выполняются и какие категории анализируются.

Пример кастомного конфига:

const customConfig = {
  extends: 'lighthouse:default',
  settings: {
    onlyCategories: ['performance'],
    throttling: {
      rttMs: 150,
      throughputKbps: 1600,
      cpuSlowdownMultiplier: 4,
    },
  },
};
  • extends — позволяет наследовать стандартную конфигурацию.
  • settings.throttling — задаёт эмуляцию сети и производительности процессора.
  • Можно полностью переопределять список аудитов в массиве audits.

Получение и обработка отчёта

После выполнения анализа результат хранится в объекте runnerResult.lhr. Основные свойства:

  • categories — оценки по категориям.
  • audits — список всех аудитов с детальной информацией: score, displayValue, description.
  • finalUrl — URL страницы после возможного редиректа.

Пример фильтрации ключевых аудитов:

const audits = runnerResult.lhr.audits;
console.log('First Contentful Paint:', audits['first-contentful-paint'].displayValue);
console.log('Largest Contentful Paint:', audits['largest-contentful-paint'].displayValue);
console.log('Accessibility score:', runnerResult.lhr.categories.accessibility.score * 100);

Сохранение отчёта

Отчёт можно сохранить в файл в формате HTML или JSON:

const fs = require('fs');

fs.writeFileSync('report.html', runnerResult.report); // HTML
fs.writeFileSync('report.json', JSON.stringify(runnerResult.lhr, null, 2)); // JSON
  • runnerResult.report содержит строковое представление отчёта в выбранном формате.
  • JSON-отчёт удобен для последующей автоматической обработки и интеграции в CI/CD.

Автоматизация в CI/CD

Lighthouse легко интегрируется в процессы CI/CD для мониторинга качества сайтов:

if (runnerResult.lhr.categories.performance.score < 0.9) {
  throw new Error('Performance score below threshold');
}
  • Использование порогов (thresholds) позволяет автоматически отклонять сборки с низкой производительностью.
  • Можно комбинировать с генерацией HTML-отчётов для визуального анализа изменений.

Эмуляция устройств и сетевых условий

Настройка эмуляции устройства и скорости сети критична для получения реалистичных результатов:

const options = {
  emulatedFormFactor: 'mobile',
  throttling: {
    rttMs: 200,
    throughputKbps: 1200,
    cpuSlowdownMultiplier: 3,
  },
};
  • emulatedFormFactor влияет на рендеринг страницы и размер вьюпорта.
  • throttling позволяет симулировать медленные соединения и слабые устройства, выявляя реальные проблемы производительности.

Использование Lighthouse как Node-модуля

Прямое использование библиотеки в Node.js даёт полный контроль над запуском и обработкой результатов, что делает её удобной для интеграции в собственные инструменты анализа, создание дашбордов, генерацию отчётов для команд разработки и автоматического тестирования.

  • Можно комбинировать с puppeteer для выполнения сложных сценариев перед запуском аудита.
  • Поддерживаются различные версии Chrome, включая безголовый режим для серверных сред.