Lighthouse распространяется как часть экосистемы Node.js и может использоваться несколькими способами: через CLI, как модуль в коде или встроенно в инструменты браузера. Для учебных и автоматизированных сценариев наибольший интерес представляет именно использование через Node.js.
Установка через npm:
npm install -g lighthouse
Глобальная установка позволяет вызывать утилиту из командной строки. Для интеграции в проект предпочтительна локальная установка:
npm install lighthouse
Дополнительно требуется установленный браузер Chrome или Chromium, так как Lighthouse использует его для проведения аудита. В большинстве случаев достаточно актуальной версии Google Chrome.
Проверка установки:
lighthouse --version
Базовый анализ запускается одной командой:
lighthouse https://example.com
После выполнения происходит:
По умолчанию результат сохраняется в HTML-файл в текущей директории. Также в консоль выводится краткая сводка с ключевыми метриками.
Основные категории оценки:
CLI поддерживает множество флагов, позволяющих управлять поведением анализа.
lighthouse https://example.com --output html --output json
Можно одновременно получить несколько форматов.
lighthouse https://example.com --output-path ./report.html
lighthouse https://example.com --chrome-flags="--headless"
lighthouse https://example.com --only-categories=performance,seo
Это ускоряет анализ и позволяет сосредоточиться на конкретных аспектах.
Использование Lighthouse как библиотеки даёт полный контроль над процессом и результатами.
Минимальный пример:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
(async () => {
const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'] });
const options = {
port: chrome.port,
output: 'json',
logLevel: 'info'
};
const runnerResult = await lighthouse('https://example.com', options);
console.log('Performance score:', runnerResult.lhr.categories.performance.score);
await chrome.kill();
})();
Ключевые элементы:
Объект lhr (Lighthouse Result) содержит всю информацию
об аудите.
Основные разделы:
runnerResult.lhr.requestedUrl
runnerResult.lhr.finalUrl
runnerResult.lhr.fetchTime
runnerResult.lhr.categories.performance.score
runnerResult.lhr.categories.seo.score
Оценки находятся в диапазоне от 0 до 1, где:
runnerResult.lhr.audits['first-contentful-paint']
runnerResult.lhr.audits['largest-contentful-paint']
runnerResult.lhr.audits['speed-index']
Каждый аудит включает:
score — оценкаdisplayValue — удобочитаемое значениеdescription — описаниеdetails — дополнительные данныеВремя до появления первого контента.
runnerResult.lhr.audits['first-contentful-paint'].displayValue
Время загрузки самого крупного элемента.
Показывает скорость визуального наполнения страницы.
Время, когда страница становится полностью интерактивной.
Суммарное время блокировки основного потока.
Lighthouse поддерживает настройку через конфигурационные файлы.
Пример базовой конфигурации:
module.exports = {
extends: 'lighthouse:default',
settings: {
onlyCategories: ['performance'],
throttlingMethod: 'devtools'
}
};
Использование:
lighthouse https://example.com --config-path=./config.js
Lighthouse имитирует реальные условия:
Имитирует слабые устройства.
Настройка:
settings: {
throttling: {
rttMs: 150,
throughputKbps: 1600,
cpuSlowdownMultiplier: 4
}
}
Это позволяет получить более реалистичные результаты.
Анализ можно выполнять не только по URL, но и по состоянию страницы после взаимодействия.
Для этого используется Puppeteer:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.click('#login');
// Передаём текущий URL в Lighthouse
})();
Это важно для:
Результаты анализа часто требуют дополнительной обработки.
Пример извлечения метрик:
const audits = runnerResult.lhr.audits;
const metrics = {
fcp: audits['first-contentful-paint'].numericValue,
lcp: audits['largest-contentful-paint'].numericValue,
tbt: audits['total-blocking-time'].numericValue
};
console.log(metrics);
JSON-результат можно преобразовать в любой формат:
Пример сохранения:
const fs = require('fs');
fs.writeFileSync('report.json', runnerResult.report);
Lighthouse активно применяется для автоматической проверки качества:
lighthouse https://example.com --output json --quiet
Затем анализируется score:
if (performanceScore < 0.8) {
process.exit(1);
}
Это позволяет:
Решение:
--chrome-flags="--no-sandbox"
Особенно актуально в Docker и CI.
Причины:
Решение — ограничить категории или отключить throttling.
Lighthouse использует симуляции, поэтому значения могут колебаться.
Рекомендуется:
Отчёт Lighthouse — это не просто оценки, а инструмент диагностики.
Ключевые аспекты анализа:
Особое внимание уделяется:
Каждый аудит содержит рекомендации, которые можно напрямую использовать для оптимизации кода и инфраструктуры.