Установка и настройка

Установка через npm

Для использования Lighthouse в проектах на JavaScript чаще всего применяется пакет lighthouse, распространяемый через npm. Установка производится командой:

npm install -g lighthouse

Ключевой момент: использование флага -g позволяет запускать Lighthouse из командной строки глобально. Если требуется использовать библиотеку внутри проекта, лучше установить её локально:

npm install --save-dev lighthouse

Локальная установка гарантирует совместимость с конкретной версией Node.js и позволяет фиксировать зависимости проекта.

Проверка установки

После установки проверка работоспособности производится командой:

lighthouse --version

Если команда возвращает номер версии, установка прошла успешно.

Использование Lighthouse через Node.js API

Lighthouse предоставляет полноценное Node.js API для интеграции с собственными скриптами и инструментами автоматизации. Основные шаги:

  1. Импорт библиотеки:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
  1. Запуск экземпляра Chrome:
async function launchChrome() {
  return await chromeLauncher.launch({ chromeFlags: ['--headless'] });
}
  1. Конфигурация и вызов Lighthouse:
async function runLighthouse(url, opts, config) {
  const chrome = await launchChrome();
  opts.port = chrome.port;

  const result = await lighthouse(url, opts, config);
  await chrome.kill();

  return result.lhr; // Lighthouse Result Object
}

Пояснение:

  • opts содержит параметры запуска, например: output, onlyCategories, emulatedFormFactor.
  • config — объект конфигурации Lighthouse, который позволяет изменять категории аудита, настройки эмуляции и правила аудита.

Основные параметры запуска

  • output — формат отчёта ('html', 'json').
  • onlyCategories — массив категорий для анализа (performance, accessibility, best-practices, seo, pwa).
  • emulatedFormFactor — эмуляция устройства ('mobile' или 'desktop').

Пример использования:

const opts = {
  output: 'json',
  onlyCategories: ['performance', 'seo'],
  emulatedFormFactor: 'desktop'
};

runLighthouse('https://example.com', opts).then(result => {
  console.log('Performance score:', result.categories.performance.score);
  console.log('SEO score:', result.categories.seo.score);
});

Конфигурация Lighthouse

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

  • Аудит конкретных страниц.
  • Правила аудита (включение/отключение отдельных проверок).
  • Настройку сети и CPU throttling.
  • Эмуляцию различных форм-факторов устройств.

Пример базовой конфигурации:

const config = {
  extends: 'lighthouse:default',
  settings: {
    onlyCategories: ['performance', 'accessibility'],
    emulatedFormFactor: 'mobile',
    throttlingMethod: 'simulate'
  }
};

Сценарии интеграции

  • Автоматизированное тестирование: Lighthouse можно запускать в CI/CD пайплайнах, чтобы контролировать качество веб-приложений при каждом деплое.
  • Мониторинг производительности: периодический запуск анализов страниц и сбор метрик в базе данных для последующего сравнения.
  • Отчёты для клиентов или команды: генерация HTML- или JSON-отчётов для визуализации показателей и проблем.

Практические советы

  1. Изоляция окружения: использовать Headless Chrome для стабильного и повторяемого анализа.
  2. Выбор категорий: запуск полного анализа только при необходимости, для экономии ресурсов лучше ограничивать категории.
  3. Логирование результатов: сохранять JSON-отчёты для последующей автоматической обработки и визуализации.
  4. Кэширование: избегать повторных аудитов одной страницы в короткий промежуток времени, чтобы результаты были корректными.

Пример интеграции с Express.js

const express = require('express');
const app = express();

app.get('/audit', async (req, res) => {
  const url = req.query.url;
  const result = await runLighthouse(url, { output: 'json' });
  res.json(result);
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

Такой подход позволяет создавать веб-сервисы для мгновенной оценки производительности и SEO-оптимизации страниц на лету.