Библиотека Lighthouse в JavaScript предоставляет мощный инструмент для аудита веб-страниц. Одним из ключевых аспектов работы с Lighthouse является использование событий и callbacks для отслеживания прогресса аудита и обработки результатов.
События в Lighthouse позволяют реагировать на различные стадии процесса аудита. Основные события можно разделить на несколько категорий:
Старт и завершение аудита
startAudit — вызывается при начале аудита, может
использоваться для логирования или отображения индикатора загрузки.endAudit — вызывается после завершения всех проверок,
предоставляет финальный отчет.Промежуточный прогресс
auditProgress — генерируется на каждой стадии аудита
отдельного категории, передаёт объект с информацией о текущей категории
и выполненных шагах.fetchProgress — сигнализирует о процессе загрузки
ресурсов, что позволяет отслеживать сетевые запросы и их время.Ошибки и предупреждения
auditError — уведомляет о критических ошибках в
процессе проверки.auditWarning — информирует о потенциальных проблемах,
которые не блокируют выполнение аудита.События можно слушать через объект EventEmitter, который используется внутри Lighthouse:
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('startAudit', () => {
console.log('Аудит начат');
});
emitter.on('endAudit', (report) => {
console.log('Аудит завершен');
console.log(report);
});
Callbacks в Lighthouse позволяют обработать данные после выполнения определённого шага аудита. Они обеспечивают асинхронную реакцию на события без блокировки основного потока.
Примеры использования:
function handleCategoryResult(categoryResult) {
console.log(`Результаты категории ${categoryResult.id}:`);
categoryResult.auditRefs.forEach(audit => {
console.log(`- ${audit.id}: ${audit.score}`);
});
}
Callback передаётся в функцию, которая запускает аудит:
const lighthouse = require('lighthouse');
lighthouse('https://example.com', { output: 'json' })
.then(results => handleCategoryResult(results.lhr.categories))
.catch(error => console.error(error));
function onAuditProgress(progress) {
console.log(`Прогресс: ${progress.step} из ${progress.totalSteps}`);
}
// Использование вместе с событием auditProgress
emitter.on('auditProgress', onAuditProgress);
События и callbacks в Lighthouse часто используются совместно для
построения сложной логики мониторинга аудита. Например, можно
использовать событие auditProgress для обновления
индикатора выполнения и одновременно передавать промежуточные результаты
в callback для анализа:
emitter.on('auditProgress', progress => {
updateUI(progress); // Обновление визуального прогресс-бара
processPartialResults(progress, result => {
console.log('Обработанные промежуточные данные:', result);
});
});
auditError и
auditWarning для построения системы логирования и
мониторинга.Lighthouse активно использует асинхронность. Callbacks могут быть
промисами или функциями async/await. Пример:
async function handleAuditResultAsync(result) {
try {
const data = await processData(result);
console.log('Асинхронно обработанные данные:', data);
} catch (err) {
console.error('Ошибка при обработке данных:', err);
}
}
lighthouse('https://example.com', { output: 'json' })
.then(results => handleAuditResultAsync(results.lhr))
.catch(err => console.error(err));
Lighthouse позволяет расширять стандартный набор событий, создавая кастомные события. Это полезно для интеграции с собственными системами аналитики или CI/CD пайплайнами:
emitter.emit('customEvent', { message: 'Начало интеграционного аудита' });
emitter.on('customEvent', data => console.log(data.message));
Кастомные события можно сочетать с callbacks для гибкой обработки и интеграции с внешними инструментами.
Эта модель построения взаимодействия между событиями и callbacks является фундаментальной для эффективного применения Lighthouse в реальных проектах, обеспечивая прозрачность процессов аудита и возможность детальной аналитики на каждом этапе.