Lighthouse — это инструмент для автоматизированного аудита
веб-страниц, разработанный Google, который позволяет анализировать
производительность, доступность, SEO и лучшие практики веб-разработки.
Для работы с Lighthouse в проекте на JavaScript чаще всего используется
пакет lighthouse, устанавливаемый через npm:
npm install lighthouse --save-dev
После установки можно использовать Lighthouse как CLI, либо напрямую через Node.js API. Для интеграции в Dashboard чаще используется API, так как оно позволяет запускать аудиты программно и обрабатывать результаты в дальнейшем.
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
async function runLighthouse(url) {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {port: chrome.port};
const runnerResult = await lighthouse(url, options);
console.log('Lighthouse score:', runnerResult.lhr.categories.performance.score * 100);
await chrome.kill();
}
runLighthouse('https://example.com');
Для точной настройки аудита используется объект конфигурации. Он позволяет выбрать конкретные категории, аудиты и дополнительные настройки:
const config = {
extends: 'lighthouse:default',
settings: {
onlyCategories: ['performance', 'accessibility'],
emulatedFormFactor: 'desktop',
throttlingMethod: 'simulate'
}
};
const runnerResult = await lighthouse(url, {port: chrome.port}, config);
Ключевые моменты конфигурации:
onlyCategories — ограничение категорий аудита.emulatedFormFactor — эмуляция устройства
(mobile, desktop).throttlingMethod — метод эмуляции сетевых и
процессорных условий (simulate,
devtools).Lighthouse возвращает объект lhr (Lighthouse Result),
который содержит детальную информацию об аудите. Основные части:
categories — результаты по категориям (Performance,
SEO, Accessibility, Best Practices, PWA).audits — полный список всех проверок с оценками и
метриками.fetchTime — время проведения аудита.finalUrl — URL страницы, на которой выполнен
аудит.Пример обработки результатов для Dashboard:
const {categories, audits} = runnerResult.lhr;
const performanceScore = categories.performance.score * 100;
const accessibilityScore = categories.accessibility.score * 100;
const metrics = {
firstContentfulPaint: audits['first-contentful-paint'].displayValue,
largestContentfulPaint: audits['largest-contentful-paint'].displayValue,
totalBlockingTime: audits['total-blocking-time'].displayValue
};
console.log({performanceScore, accessibilityScore, metrics});
Для отображения данных на Dashboard удобно использовать графические библиотеки, например, Chart.js или D3.js. Обычно визуализируют:
Пример генерации графика для метрик:
const Chart = require('chart.js');
const ctx = document.getElementById('performanceChart').getContext('2d');
const chart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['FCP', 'LCP', 'TBT'],
datasets: [{
label: 'Метрики производительности',
data: [
metrics.firstContentfulPaint,
metrics.largestContentfulPaint,
metrics.totalBlockingTime
],
backgroundColor: ['#4caf50', '#2196f3', '#ff9800']
}]
},
options: {
responsive: true,
scales: {
y: {beginAtZero: true}
}
}
});
Для регулярного обновления данных на Dashboard часто используют
планировщик задач, например, node-cron. Это позволяет
запускать Lighthouse по расписанию и сохранять результаты в базу
данных:
const cron = require('node-cron');
cron.schedule('0 0 * * *', async () => {
const result = await runLighthouse('https://example.com');
saveToDatabase(result.lhr);
});
Рекомендации для Dashboard:
lhr) для последующего анализа и
построения трендов.Lighthouse позволяет создавать свои собственные аудиты, если стандартных недостаточно. Для этого создаётся отдельный модуль с классом, наследуемым от базового интерфейса:
const Audit = require('lighthouse').Audit;
class CustomAudit extends Audit {
static get meta() {
return {
id: 'custom-audit',
title: 'Проверка кастомного условия',
description: 'Проверяет специфический критерий',
requiredArtifacts: ['URL']
};
}
static audit(artifacts) {
const score = artifacts.URL.includes('example') ? 1 : 0;
return {score};
}
}
const config = {
extends: 'lighthouse:default',
audits: [CustomAudit]
};
Кастомные аудиты можно интегрировать в Dashboard наравне с основными категориями, обеспечивая глубокую и специфичную аналитику для проекта.