Lighthouse — это инструмент для анализа качества веб-страниц,
разработанный Google. Для работы с ним через JavaScript используется
пакет lighthouse, который устанавливается через npm:
npm install -g lighthouse
В среде Node.js подключение осуществляется стандартным
require:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
chrome-launcher необходим для запуска экземпляра Chrome
в режиме, подходящем для аудита.
Для сбора данных Lighthouse требуется экземпляр Chrome, запущенный с удаленным дебаг-портом:
async function launchChrome() {
return await chromeLauncher.launch({
chromeFlags: ['--headless', '--disable-gpu', '--no-sandbox']
});
}
--headless позволяет запускать Chrome без GUI, ускоряя
процесс.--disable-gpu отключает аппаратное ускорение, что
минимизирует влияние на показатели.--no-sandbox требуется в некоторых окружениях для
корректного запуска без прав администратора.После запуска Chrome возвращается объект с портом, который используется для подключения Lighthouse.
Основной объект опций Lighthouse содержит следующие ключевые параметры:
const options = {
port: chrome.port, // порт, на котором запущен Chrome
output: 'json', // формат отчета: json или html
onlyCategories: ['performance', 'accessibility', 'best-practices', 'seo', 'pwa'], // выбор категорий
};
port — обязательный параметр для подключения к
экземпляру Chrome.output — формат отчета, который затем можно сохранить
или обработать программно.onlyCategories — позволяет ограничить аудит выбранными
категориями, ускоряя сбор данных.Можно дополнительно использовать settings для тонкой
настройки:
options.settings = {
emulatedFormFactor: 'desktop', // 'mobile' или 'desktop'
throttlingMethod: 'simulate', // режим эмуляции сетевых условий
screenEmulation: {
width: 1920,
height: 1080,
deviceScaleFactor: 1,
mobile: false
}
};
Эти параметры позволяют контролировать условия, в которых Lighthouse собирает данные, что критично для воспроизводимости результатов.
Аудит веб-страницы выполняется функцией
lighthouse(url, options), которая возвращает промис с
результатами:
async function runLighthouse(url) {
const result = await lighthouse(url, options);
return result.lhr; // Lighthouse Report Object
}
Объект lhr содержит подробные данные по каждой категории
аудита, включая показатели производительности, доступности, SEO и
рекомендации.
Собранные данные могут быть сохранены в файл для последующего анализа:
const fs = require('fs');
fs.writeFileSync('report.json', JSON.stringify(result.lhr, null, 2));
Формат JSON позволяет интегрировать данные с системами Continuous Integration, строить графики динамики показателей и анализировать изменения между версиями страниц.
Объект отчета (lhr) включает несколько ключевых
разделов:
categories — оценки по основным категориям с разбивкой
на конкретные аудиты.audits — детализированные проверки с метриками,
описаниями и рекомендациями.configSettings — параметры конфигурации, использованные
при сборе данных.fetchTime — временная метка проведения аудита.finalUrl — URL, по которому был проведен аудит.Каждый аудит содержит:
score — числовое значение от 0 до 1.numericValue — измеренное значение метрики (например,
время загрузки).displayValue — человекочитаемое представление
метрики.details — дополнительные данные, включая таблицы,
графики и скриншоты.Для аудита множества страниц можно использовать асинхронные функции и параллельный запуск нескольких экземпляров Chrome:
const urls = ['https://example.com', 'https://example.org'];
async function auditMultiplePages(urls) {
const results = [];
for (const url of urls) {
const chrome = await launchChrome();
const result = await runLighthouse(url, { port: chrome.port });
results.push(result);
await chrome.kill();
}
return results;
}
Важно закрывать каждый экземпляр Chrome после завершения аудита, чтобы избежать утечек памяти и конфликтов портов.
Для более точного моделирования пользовательского опыта Lighthouse поддерживает:
Пример настройки:
options.throttling = {
rttMs: 150,
throughputKbps: 1638.4,
cpuSlowdownMultiplier: 4,
requestLatencyMs: 150,
downloadThroughputKbps: 1638.4,
uploadThroughputKbps: 768
};
Эти настройки критичны для оценки реального пользовательского опыта, а не только скорости локальной машины.
Для отладки процесса сбора данных удобно логировать ключевые события:
console.log(`Запуск аудита: ${url}`);
console.log(`Результат: ${result.categories.performance.score}`);
Это позволяет отслеживать прогресс при массовом аудите страниц и выявлять ошибки подключения или падения Chrome.
Lighthouse легко интегрируется с системами CI/CD. JSON-отчеты могут анализироваться скриптами, сравниваться с предыдущими результатами и использоваться для создания метрик качества, чтобы блокировать коммиты с ухудшением производительности или доступности.
Использование Node.js и lighthouse в качестве API
позволяет строить полностью автоматизированные пайплайны сбора данных
без необходимости ручного запуска Chrome или браузерных расширений.