Node.js API

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

npm install lighthouse --save-dev

После установки его можно подключить в проекте:

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

Обязательным компонентом является запуск Chrome в режиме без интерфейса (headless), поскольку Lighthouse работает поверх DevTools Protocol. Для этого часто используют библиотеку chrome-launcher, которая обеспечивает управление экземпляром браузера из Node.js.


Запуск аудита через Node.js API

Основная функция для аудита — lighthouse(url, options, config). Параметры:

  • url – строка с адресом веб-страницы, которую необходимо протестировать.
  • options – объект с настройками, включая порт Chrome, категорию аудита, путь к файлу отчёта и др.
  • config – необязательная конфигурация, определяющая набор аудитов, категорий и стратегий.

Пример запуска:

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

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

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

В объекте runnerResult содержится структура lhr (Lighthouse Result), включающая все показатели аудита, результаты отдельных проверок, скриншоты и рекомендации по улучшению.


Настройка категорий и аудиторов

Lighthouse позволяет выбирать категории аудита через параметр onlyCategories:

const options = {
  port: chrome.port,
  onlyCategories: ['performance', 'accessibility'],
};

Можно исключить определённые аудиторы или добавить кастомные, создавая свой объект конфигурации:

const config = {
  extends: 'lighthouse:default',
  settings: {
    onlyAudits: ['first-contentful-paint', 'largest-contentful-paint'],
    throttlingMethod: 'simulate',
  }
};

Кастомизация конфигурации полезна при необходимости проводить специфические измерения, например, тестировать только производительность или доступность.


Обработка результатов аудита

runnerResult.lhr содержит полный результат в формате JSON:

  • categories – итоговые баллы по категориям (performance, accessibility, best-practices, seo, pwa).
  • audits – детальные проверки с информацией о проблемах и рекомендациями.
  • timing – метрики времени загрузки страницы.
  • finalUrl – URL страницы, на которой завершился аудит.

Пример извлечения ключевых метрик:

const {lhr} = runnerResult;
console.log('FCP:', lhr.audits['first-contentful-paint'].displayValue);
console.log('LCP:', lhr.audits['largest-contentful-paint'].displayValue);
console.log('Accessibility score:', lhr.categories.accessibility.score * 100);

Генерация отчётов

Node.js API позволяет получать отчёты в различных форматах: HTML, JSON, CSV. Это задаётся через опцию output:

const options = {port: chrome.port, output: 'html'};
const report = runnerResult.report;
require('fs').writeFileSync('report.html', report);

Можно одновременно генерировать несколько форматов:

const options = {port: chrome.port, output: ['html', 'json']};

Отчёты содержат визуализацию аудита, таблицы метрик и рекомендации, которые можно использовать в CI/CD или для внутреннего анализа.


Интеграция с CI/CD

Lighthouse идеально подходит для автоматической проверки сайтов в пайплайне. Для этого используют Headless Chrome и Node.js API. Ключевые моменты:

  • Запуск аудита как часть тестового этапа.
  • Автоматическое сохранение отчётов для последующего анализа.
  • Использование только нужных категорий и аудитов для ускорения проверки.
  • Настройка пороговых значений для fail/pass: если балл ниже определённого уровня, сборка считается неуспешной.

Пример проверки производительности с порогом:

if (lhr.categories.performance.score < 0.9) {
  throw new Error('Performance score below threshold!');
}

Использование дополнительных возможностей

Lighthouse Node.js API поддерживает:

  • Пользовательские конфигурации с изменением метрик, аудиторов и категорий.
  • Throttling сетевых и процессорных условий для имитации реальных пользователей.
  • Присоединение к уже запущенному Chrome через port.
  • Асинхронное выполнение нескольких аудитов параллельно с управлением экземплярами Chrome.

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

const urls = ['https://example.com', 'https://example.org'];
await Promise.all(urls.map(url => lighthouse(url, options)));

Такой подход эффективен при аудите большого числа страниц или при тестировании мультилендинговых сайтов.


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