Lighthouse — это инструмент для автоматизированного аудита качества веб-страниц, предоставляющий метрики производительности, доступности, SEO и лучшие практики. В современном JavaScript его возможности доступны через API, что позволяет интегрировать аудит прямо в скрипты и CI/CD-процессы.
Для начала необходимо подключить библиотеку через Node.js:
import lighthouse from 'lighthouse';
import chromeLauncher from 'chrome-launcher';
Создание экземпляра Chrome и запуск аудита осуществляется следующим образом:
async function runLighthouse(url, options = {}, config = null) {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
options.port = chrome.port;
const result = await lighthouse(url, options, config);
await chrome.kill();
return result.lhr; // Lighthouse Result
}
Ключевой момент: Lighthouse API возвращает объект lhr
(Lighthouse Result), содержащий детализированную информацию о каждой
проверке, метрики и рекомендации по улучшению.
Lighthouse позволяет задавать конфигурацию через объект
config. Основные блоки:
performance, accessibility,
seo.Пример конфигурации:
const config = {
extends: 'lighthouse:default',
settings: {
onlyCategories: ['performance', 'seo'],
emulatedFormFactor: 'mobile',
throttling: {
rttMs: 150,
throughputKbps: 1600,
cpuSlowdownMultiplier: 4,
},
},
};
В settings можно точно контролировать условия, в которых
будет проходить аудит, включая сетевое соединение, скорость процессора и
размеры экрана.
Lighthouse умеет работать с современными веб-API, позволяя оценивать страницы, использующие:
Для получения информации о Web Vitals достаточно использовать
lhr.audits:
const {lhr} = await runLighthouse('https://example.com', {output: 'json'});
console.log('Largest Contentful Paint:', lhr.audits['largest-contentful-paint'].displayValue);
console.log('Cumulative Layout Shift:', lhr.audits['cumulative-layout-shift'].displayValue);
Lighthouse возвращает обширную структуру данных. Основные свойства:
categories — суммарные баллы по направлениям.audits — детальные результаты каждой проверки.timing — время выполнения аудита.requestedUrl и finalUrl — URL, которые
проверялись.fetchTime — время получения данных.Для интеграции в CI/CD удобно формировать отчеты в формате JSON или HTML:
import fs from 'fs';
const reportHtml = result.report; // если указан output: 'html'
fs.writeFileSync('lighthouse-report.html', reportHtml);
const reportJson = JSON.stringify(result.lhr, null, 2);
fs.writeFileSync('lighthouse-report.json', reportJson);
Lighthouse поддерживает кастомные аудиты через плагины:
id,
title, description и метод
audit().plugins.Пример кастомного аудита для проверки наличия мета-тега
viewport:
const customAudit = {
id: 'viewport-meta-check',
title: 'Проверка meta viewport',
description: 'Страница должна содержать meta viewport для корректного отображения на мобильных устройствах',
audit: async () => {
return {
score: 1,
details: {type: 'text', items: ['meta viewport присутствует']},
};
},
};
const config = {
extends: 'lighthouse:default',
audits: [customAudit],
};
Lighthouse API полностью асинхронен. Для эффективной работы с большим количеством страниц рекомендуется использовать:
Promise.all.const urls = ['https://site1.com', 'https://site2.com'];
const audits = await Promise.all(urls.map(url => runLighthouse(url, {output: 'json'})));
Lighthouse позволяет тестировать страницы в различных условиях:
mobile,
desktopПример настройки эмуляции слабого устройства:
const options = {
onlyCategories: ['performance'],
throttlingMethod: 'simulate',
emulatedFormFactor: 'mobile',
throttling: {
rttMs: 150,
throughputKbps: 400,
cpuSlowdownMultiplier: 6,
},
};
Это позволяет получать реалистичные показатели производительности для пользователей с ограниченными ресурсами.