Timeout (время выполнения)
В Lighthouse время выполнения тестов критически важно, так как слишком долгие проверки могут искажать результаты, создавать ложные задержки или приводить к прерыванию анализа. В Lighthouse для контроля времени выполнения используется несколько ключевых параметров:
maxWaitForFcp и
maxWaitForLoad — определяют максимальное время
ожидания событий First Contentful Paint и полной загрузки страницы.
Значения задаются в миллисекундах.
const options = {
maxWaitForFcp: 15_000, // 15 секунд
maxWaitForLoad: 30_000, // 30 секунд
};
Эти параметры предотвращают зависание сканирования на медленных страницах и позволяют задавать баланс между полнотой данных и временем анализа.
port и timeout в Node
API — при запуске Lighthouse программно через Node.js можно
задавать общее время выполнения для теста:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
(async () => {
const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'] });
const options = { port: chrome.port, timeout: 60_000 }; // 60 секунд
const runnerResult = await lighthouse('https://example.com', options);
await chrome.kill();
})();
Параметр timeout задаёт максимальное время ожидания
завершения теста и автоматически останавливает его, если оно
превышено.
Автоматическое управление тайм-аутами для асинхронных
операций. Lighthouse использует Promise.race для
контроля асинхронных вызовов и предотвращения зависаний. Любой
нестабильный API, долгий скрипт или сетевой запрос, превышающий
тайм-аут, будет принудительно завершён с ошибкой
TimeoutError.
Управление памятью
Память является критическим ресурсом, особенно при тестировании больших страниц с множеством элементов и сложными скриптами. В Lighthouse применяются следующие механизмы управления памятью:
Использование Chrome DevTools Protocol (CDP) — Lighthouse взаимодействует с браузером через CDP, что позволяет получать данные о текущем использовании памяти, включать сборку мусора перед тестами и отслеживать утечки.
const client = await page.target().createCDPSession();
await client.send('HeapProfiler.collectGarbage');
const memory = await client.send('Memory.getDOMCounters');
console.log(memory);
Этот подход помогает минимизировать влияние накопленного мусора и объектов, неиспользуемых страницей, на результаты анализа.
Ограничение числа одновременно выполняемых задач — при больших страницах Lighthouse создаёт несколько этапов (audit), каждый из которых использует отдельные процессы или потоки. Это позволяет держать потребление памяти на управляемом уровне и избегать Out-of-Memory ошибок.
Анализ памяти в отчётах — некоторые аудиторы
Lighthouse предоставляют детальную статистику о потреблении ресурсов
страницей. Например, аудит performance-budget учитывает
использование JS, CSS и изображений, что напрямую влияет на объём памяти
в браузере.
Рекомендации по настройке
maxWaitForLoad и timeout, чтобы избежать
преждевременного завершения теста.disableStorageReset, чтобы уменьшить нагрузку на память при
последовательных запусках тестов на одной сессии браузера.Практические примеры
Тестирование SPA с долгим рендером:
const options = {
maxWaitForFcp: 20_000,
maxWaitForLoad: 60_000,
timeout: 90_000,
disableStorageReset: true
};
Здесь увеличенные тайм-ауты позволяют корректно измерять метрики загрузки динамического контента, а сохранение состояния storage снижает повторное использование ресурсов.
Минимизация утечек памяти при массовом аудите:
await client.send('HeapProfiler.collectGarbage');
await client.send('Runtime.enable');
Вызов сборки мусора перед каждой итерацией анализа предотвращает накопление DOM-элементов и объектов JS в памяти.
Эффективное управление тайм-аутами и памятью в Lighthouse обеспечивает точные, стабильные и воспроизводимые результаты анализа. Правильная настройка этих параметров особенно важна для масштабного тестирования и интеграции в CI/CD pipelines.