Конфигурация сервера

Для запуска Lighthouse на сервере требуется Node.js версии не ниже 14. Установка производится через npm:

npm install -g lighthouse

После установки становится доступна командная строка lighthouse, а также модуль для использования в скриптах Node.js:

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

Для серверного использования рекомендуется автоматический запуск инстанса Chrome через chrome-launcher, чтобы исключить зависимость от локального браузера и обеспечить стабильность работы на сервере.

Настройка конфигурации отчётов

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

const config = {
  extends: 'lighthouse:default',
  settings: {
    onlyCategories: ['performance', 'accessibility', 'best-practices', 'seo'],
    emulatedFormFactor: 'desktop',
    throttlingMethod: 'simulate',
    output: ['html', 'json']
  }
};

Ключевые настройки:

  • onlyCategories — определяет, какие категории аудита выполнять. Можно выбрать одну или несколько из: performance, accessibility, best-practices, seo, pwa.
  • emulatedFormFactor — задаёт тип устройства для эмуляции (desktop, mobile).
  • throttlingMethod — метод имитации медленного соединения (simulate, devtools).
  • output — форматы выходных данных (html, json).

Управление Chrome-инстансом

На сервере важно правильно запускать и завершать Chrome для анализа. Пример запуска с последующим аудитом:

async function runLighthouse(url, config) {
  const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'] });
  const options = { port: chrome.port, output: 'json' };
  const result = await lighthouse(url, options, config);
  await chrome.kill();
  return result.lhr;
}

Здесь ключевые моменты:

  • chromeFlags: ['--headless'] — запуск Chrome без GUI, необходим для серверного окружения.
  • options.port — передача порта запущенного Chrome для подключения Lighthouse.
  • chrome.kill() — корректное завершение процесса после аудита для предотвращения утечек ресурсов.

Настройка серверного окружения

Для стабильной работы на сервере следует учитывать:

  • Ресурсы сервера: Chrome в режиме headless потребляет память и CPU, особенно при параллельных проверках. Рекомендуется ограничивать количество одновременных запусков.
  • Пути сохранения отчётов: удобно сохранять отчёты в отдельной директории с именами по URL или timestamp для последующего анализа.
  • Автоматизация: использование cron или task scheduler для периодического запуска проверок и формирования отчётов.

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

Lighthouse на сервере можно интегрировать в пайплайн CI/CD, чтобы отслеживать производительность и SEO на каждом деплое. Основные шаги:

  1. Установка lighthouse и chrome-launcher в контейнере или на build-агенте.
  2. Настройка скрипта запуска с конфигурацией категорий и форматов отчёта.
  3. Сохранение результатов в артефакты сборки или отправка в систему мониторинга.
  4. Опционально: использование lighthouse-ci для более продвинутой интеграции и автоматического сравнения метрик.

Управление логированием и отладкой

Для серверного окружения критически важно видеть ошибки и предупреждения, возникающие во время аудита:

  • logLevel в настройках позволяет включить info, warn, error или verbose.
  • Логирование можно перенаправлять в файлы для последующего анализа.
  • Ошибки, связанные с запуском Chrome, чаще всего связаны с отсутствием библиотек или несовместимостью версий Node.js и Chrome.

Кэширование и повторное использование ресурсов

Чтобы ускорить аудит и снизить нагрузку:

  • Использовать параметры disableStorageReset: true, если не требуется чистка кэша между запусками.
  • При частых проверках одного и того же URL можно сохранять результаты и выполнять аудиты только при изменениях на странице.

Настройка плагинов и кастомных аудитов

Lighthouse поддерживает расширения через плагины:

const config = {
  extends: 'lighthouse:default',
  plugins: ['lighthouse-plugin-custom-audit']
};

Это позволяет добавлять собственные проверки, например, специфические для корпоративного сайта требования по безопасности или SEO. Серверная конфигурация позволяет централизованно управлять всеми кастомными аудитами.

Форматы отчётов и их обработка

  • JSON — удобен для автоматической обработки и интеграции с мониторинговыми системами.
  • HTML — для визуального анализа и хранения архивов результатов.
  • При работе на сервере рекомендуется формировать оба формата, чтобы можно было одновременно хранить машиночитаемые данные и готовые визуальные отчёты.