Настройка лимитов

Lighthouse — это инструмент для автоматизированного аудита производительности, доступности, SEO и прогрессивных веб-приложений. Одним из важных аспектов работы с Lighthouse является управление лимитами ресурсов и параметров запуска, что позволяет получать точные и повторяемые результаты, а также избегать ошибок из-за превышения допустимых ограничений.

Ограничение времени выполнения

Lighthouse предоставляет возможность задавать максимальное время выполнения аудита с помощью параметра maxWaitForLoad. Этот лимит определяет, сколько миллисекунд Lighthouse будет ждать полной загрузки страницы перед началом анализа. Стандартное значение по умолчанию — 10 000 мс, однако для тяжелых страниц или медленных сетевых соединений может потребоваться увеличение.

Пример конфигурации через Node.js API:

const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');

(async () => {
  const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
  const options = {
    port: chrome.port,
    maxWaitForLoad: 20000
  };
  const runnerResult = await lighthouse('https://example.com', options);
  await chrome.kill();
})();

Ограничение количества запросов

Lighthouse позволяет управлять сетевыми лимитами через эмуляцию сетевого трафика. Параметр throttling задает ограничения скорости сети и скорости процессора, что позволяет имитировать работу на мобильных устройствах с низкой производительностью. Например:

const options = {
  throttling: {
    rttMs: 150,
    throughputKbps: 1600,
    cpuSlowdownMultiplier: 4
  }
};
  • rttMs — задержка сети в миллисекундах
  • throughputKbps — пропускная способность сети
  • cpuSlowdownMultiplier — коэффициент замедления процессора

Эти настройки напрямую влияют на результаты аудита, делая их реалистичными для целевой аудитории.

Ограничение глубины анализа

Для крупных сайтов или страниц с множеством динамических элементов может потребоваться ограничение глубины DOM-анализа. Lighthouse предоставляет возможность настраивать максимальное количество DOM-узлов, обрабатываемых во время аудита. Параметр maxDomDepth ограничивает глубину рекурсии при обходе дерева элементов. Это помогает избежать превышения памяти и ускоряет выполнение тестов.

Пример настройки:

const options = {
  settings: {
    maxDomDepth: 50
  }
};

Ограничение использования памяти

Для предотвращения чрезмерного потребления оперативной памяти можно использовать встроенные инструменты Chrome DevTools Protocol через Lighthouse. Настройка лимитов памяти помогает стабилизировать работу на слабых машинах и гарантировать корректное завершение аудита. Лимит памяти задается через параметры jsHeapSizeLimit в конфигурации запуска Chrome:

const chrome = await chromeLauncher.launch({
  chromeFlags: ['--headless', '--js-flags="--max-old-space-size=2048"']
});

Здесь --max-old-space-size=2048 ограничивает память до 2 ГБ, что позволяет контролировать потребление ресурсов.

Ограничение количества параллельных аудитов

При запуске нескольких экземпляров Lighthouse одновременно для разных страниц или проектов важно контролировать параллельность. Node.js API не выполняет автоматическое управление очередями, поэтому рекомендуется использовать библиотеку p-limit или аналогичные механизмы. Пример:

const pLimit = require('p-limit');
const limit = pLimit(3); // максимум 3 параллельных аудита

const urls = ['https://example1.com', 'https://example2.com', 'https://example3.com'];

const audits = urls.map(url => limit(() => lighthouse(url, options)));
await Promise.all(audits);

Это предотвращает перегрузку системы и снижает риск возникновения ошибок из-за превышения ресурсов.

Настройка таймаутов для отдельных категорий аудита

Каждая категория Lighthouse — Performance, Accessibility, SEO, PWA — может иметь индивидуальные таймауты при использовании кастомных конфигураций. В settings можно указать параметры gatherMode и auditMode, которые позволяют управлять временем и глубиной анализа для каждой категории:

const options = {
  settings: {
    gatherMode: 'navigation',
    maxWaitForLoad: 15000,
    onlyCategories: ['performance', 'seo']
  }
};
  • gatherMode — режим сбора данных (navigation, timespan)
  • onlyCategories — выбор категорий для аудита

Вывод

Правильная настройка лимитов в Lighthouse обеспечивает стабильность и предсказуемость результатов. Контроль времени выполнения, глубины анализа, сетевых ограничений, памяти и параллельных аудитов помогает избежать сбоев и получить корректные метрики производительности, доступности и SEO для любых проектов.