Lighthouse — это инструмент для автоматизированного аудита веб-страниц, который анализирует производительность, доступность, SEO, использование прогрессивных веб-приложений и другие аспекты. Одной из ключевых возможностей при работе с большими проектами является параллельный запуск аудитов, позволяющий существенно ускорить процесс анализа.
В Lighthouse каждый аудит выполняется как набор отдельных асинхронных операций, которые могут запускаться одновременно. Это позволяет использовать преимущества многопоточности в Node.js через Promise и асинхронные функции, а также снижает время ожидания между отдельными запросами к веб-странице.
Простейший способ параллельного запуска — использование
Promise.all:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
async function runAudit(url) {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {port: chrome.port};
const result = await lighthouse(url, options);
await chrome.kill();
return result.lhr;
}
const urls = ['https://example.com', 'https://example.org', 'https://example.net'];
async function runParallelAudits() {
const audits = urls.map(url => runAudit(url));
const results = await Promise.all(audits);
results.forEach((lhr, index) => {
console.log(`Результаты для ${urls[index]}:`, lhr.categories.performance.score);
});
}
runParallelAudits();
Ключевые моменты:
Promise.all запускает все аудиты одновременно, экономя
время, но увеличивая нагрузку на CPU и память.p-limit
для ограничения числа параллельных промисов.p-limitДля больших списков URL рекомендуется не запускать все аудиты одновременно, а ограничивать число параллельных процессов:
const pLimit = require('p-limit');
const limit = pLimit(3); // максимум 3 параллельных аудита
async function runLimitedParallelAudits(urls) {
const audits = urls.map(url => limit(() => runAudit(url)));
const results = await Promise.all(audits);
return results;
}
Преимущества такого подхода:
Lighthouse поддерживает кастомные конфигурации аудитов, что позволяет управлять набором выполняемых тестов:
const config = {
extends: 'lighthouse:default',
settings: {
onlyCategories: ['performance', 'seo'],
maxWaitForLoad: 45000
}
};
const result = await lighthouse(url, options, config);
При параллельном запуске это особенно полезно для:
Параллельный запуск аудитов позволяет сократить время анализа проектов с большим числом страниц и категорий. Правильное управление потоками, настройка конфигураций и мониторинг ресурсов делают процесс максимально эффективным и устойчивым.