Lighthouse — это инструмент для автоматизированного аудита веб-страниц, интегрированный в Chrome DevTools и доступный через Node.js. Основная задача Lighthouse — анализировать производительность, доступность, SEO и лучшие практики веб-приложений. В контексте производительности Lighthouse оценивает, насколько быстро загружается и становится интерактивным веб-приложение, выявляет узкие места и предоставляет конкретные рекомендации по улучшению.
Lighthouse использует эмуляцию сети и устройства, чтобы измерять производительность в условиях, приближенных к реальным. По умолчанию эмулируются мобильные устройства с медленным 3G-соединением и ограниченными ресурсами процессора, что позволяет выявить критические проблемы, влияющие на пользователей с ограниченными возможностями сети и устройств.
Lighthouse оценивает производительность с помощью ряда ключевых метрик:
Каждая метрика сопровождается оценкой от 0 до 100, что позволяет быстро определить критические участки производительности.
Lighthouse работает по принципу скриптовой симуляции пользователя: инструмент загружает страницу в изолированном контексте, собирает события рендеринга, выполняет профилирование JS и фиксирует сетевые запросы. Для анализа блокирующих ресурсов используются DevTools Protocol и Performance API браузера.
Lighthouse строит древовидную модель загрузки страницы, идентифицирует ресурсы, задерживающие отображение контента, и определяет узкие места в критическом пути рендеринга. В результате формируется подробный отчет с рекомендациями по оптимизации CSS, JS, изображений и сетевых запросов.
Для запуска аудита программно используется пакет
lighthouse. Пример базового запуска:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
(async () => {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {port: chrome.port, output: 'html'};
const runnerResult = await lighthouse('https://example.com', options);
console.log(`Performance score: ${runnerResult.lhr.categories.performance.score * 100}`);
await chrome.kill();
})();
Важные моменты:
chromeFlags: ['--headless'] позволяет запускать Chrome
без GUI.runnerResult.lhr содержит Lighthouse
Result, включая метрики производительности, список рекомендаций
и диагностические данные.html или json формат
позволяет интегрировать результаты в CI/CD процессы.Lighthouse не только измеряет метрики, но и предоставляет рекомендации по оптимизации, сгруппированные по категориям:
Оптимизация ресурсов
<link rel="preload">.Улучшение времени интерактивности
Снижение смещений макета
Lighthouse легко интегрируется в процессы непрерывной интеграции, что позволяет контролировать производительность на каждом деплое. Используются следующие подходы:
Lighthouse предоставляет подробный список проблем, включая:
Каждое предупреждение сопровождается ссылкой на документацию и пример кода, что позволяет быстро исправлять проблемы.
Ключевой принцип работы с Lighthouse заключается в постоянной циклической оптимизации: измерение → анализ → улучшение → повторная проверка. Даже небольшие улучшения, такие как сжатие изображений или удаление ненужного JS, могут значительно повысить показатели FCP и LCP, а значит, улучшить пользовательский опыт и рейтинг страницы в поисковых системах.