Lighthouse — это инструмент для аудита веб-страниц, встроенный в Chrome DevTools, а также доступный как самостоятельный модуль для Node.js. Для запуска через DevTools достаточно открыть панель Audits или Lighthouse и выбрать параметры анализа. В Node.js библиотека устанавливается командой:
npm install -g lighthouse
Импорт модуля в проект:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
Для автоматизации проверок удобно использовать
chrome-launcher в связке с Lighthouse. Пример базового
запуска:
(async () => {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {logLevel: 'info', output: 'html', port: chrome.port};
const runnerResult = await lighthouse('https://example.com', options);
console.log('Lighthouse score:', runnerResult.lhr.score);
await chrome.kill();
})();
Ключевые моменты:
chromeFlags: ['--headless'] позволяет запускать Chrome
без интерфейса.runnerResult.lhr содержит полный объект отчета.output: 'html' создаёт HTML-отчет, json —
JSON-файл для дальнейшей обработки.Объект отчета (lhr) включает следующие основные
разделы:
performance, accessibility,
best-practices, seo, pwa.Пример получения оценки производительности:
const performanceScore = runnerResult.lhr.categories.performance.score;
console.log('Performance score:', performanceScore);
Lighthouse позволяет гибко конфигурировать проверки через объект
config. Например, можно отключить ненужные категории:
const config = {
extends: 'lighthouse:default',
settings: {
onlyCategories: ['performance', 'accessibility'],
throttlingMethod: 'simulate'
}
};
const runnerResult = await lighthouse('https://example.com', {port: chrome.port}, config);
Обратите внимание:
onlyCategories сокращает время анализа.throttlingMethod: 'simulate' имитирует сетевые условия
без фактического ограничения скорости.Каждый аудиторский тест содержит поля:
Пример фильтрации всех проверок производительности, где score < 0.9:
const perfAudits = Object.values(runnerResult.lhr.audits)
.filter(audit => audit.score !== null && audit.score < 0.9);
perfAudits.forEach(audit => {
console.log(`${audit.id}: ${audit.displayValue}`);
});
Lighthouse часто используется для автоматизированного контроля качества:
Пример проверки минимальной производительности:
if (runnerResult.lhr.categories.performance.score < 0.9) {
throw new Error('Performance score below threshold!');
}
Lighthouse напрямую работает через Chrome DevTools Protocol. Это позволяет:
Пример запуска с кастомным портом:
const options = {port: 9222, output: 'json'};
const runnerResult = await lighthouse('https://example.com', options);
Настройка emulatedFormFactor и throttling
позволяет тестировать страницы как на мобильных, так и на десктопных
устройствах:
const config = {
settings: {
emulatedFormFactor: 'mobile',
throttling: {
rttMs: 150,
throughputKbps: 1638,
requestLatencyMs: 562.5,
cpuSlowdownMultiplier: 4
}
}
};
emulatedFormFactor — 'mobile' или
'desktop'.throttling — точная настройка сетевых и CPU
условий.Пример создания кастомного аудита:
class MyAudit extends lighthouse.Audit {
static get meta() {
return {id: 'my-audit', title: 'Проверка кастомного условия', failureTitle: 'Не выполнено', scoreDisplayMode: 'binary'};
}
static audit() {
const value = true; // логика проверки
return {score: value ? 1 : 0};
}
}
Эти подходы делают Lighthouse мощным инструментом для глубокого анализа производительности, доступности, SEO и прогрессивных веб-приложений прямо из JavaScript-кода и DevTools.