Lighthouse является мощной утилитой для анализа производительности веб-приложений, доступной как в виде CLI, так и через Node.js API. Для работы через Node.js требуется установка пакета:
npm install -g lighthouse
npm install lighthouse
После установки можно подключать библиотеку в проект:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
Для запуска анализа с Node.js необходимо сначала запустить экземпляр Chrome:
async function launchChromeAndRunLighthouse(url, opts = {}, config = null) {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
opts.port = chrome.port;
const results = await lighthouse(url, opts, config);
await chrome.kill();
return results.lhr;
}
Lighthouse предоставляет несколько вспомогательных утилит, которые упрощают автоматизацию и анализ отчетов.
chrome-launcher позволяет запускать Chrome в
headless-режиме и управлять портами. Используется для интеграции с
Node.js:
kill() завершает процесс Chrome после завершения
анализа.Конфигурации позволяют гибко управлять аудитами и категориями анализа:
const config = {
extends: 'lighthouse:default',
settings: {
onlyCategories: ['performance', 'accessibility'],
emulatedFormFactor: 'mobile'
}
};
extends — базовая конфигурация, чаще всего используется
'lighthouse:default'.settings.onlyCategories — выбор конкретных категорий
аудита.emulatedFormFactor — эмуляция устройства:
'mobile' или 'desktop'.Флаги позволяют задавать параметры запуска анализа:
const opts = {
output: 'json',
logLevel: 'info',
disableStorageReset: true
};
output — формат отчета (json,
html или csv).logLevel — уровень логирования (silent,
info, verbose).disableStorageReset — отключение очистки кэша и
локального хранилища перед запуском.После анализа Lighthouse возвращает объект lhr
(Lighthouse Result), который можно использовать для:
const fs = require('fs');
const reportHtml = results.report;
fs.writeFileSync('report.html', reportHtml);
console.log(results.categories.performance.score);
Для отслеживания изменений производительности удобно хранить
lhr и сравнивать ключевые метрики, такие как:
performance.scoreaccessibility.scoreseo.scorefirst-contentful-paint,
largest-contentful-paint)async function testPerformance(url) {
const opts = {output: 'json', onlyCategories: ['performance']};
const results = await launchChromeAndRunLighthouse(url, opts);
return results.categories.performance.score;
}
const oldScore = await testPerformance('https://example.com/old');
const newScore = await testPerformance('https://example.com/new');
console.log(`Изменение производительности: ${newScore - oldScore}`);
const opts = {output: ['html', 'json']};
const results = await launchChromeAndRunLighthouse('https://example.com', opts);
fs.writeFileSync('report.html', results.report[0]);
fs.writeFileSync('report.json', results.report[1]);
chrome-launcher для надежного запуска и
завершения Chrome.settings и
onlyCategories для ускорения анализа.Эти вспомогательные утилиты позволяют максимально эффективно интегрировать Lighthouse в процессы разработки и тестирования, обеспечивая прозрачность и управляемость анализа веб-приложений.