Кастомные настройки throttling

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

Типы throttling

Lighthouse оперирует тремя основными типами throttling:

  1. Network throttling – ограничение пропускной способности и задержек сети.
  2. CPU throttling – замедление работы процессора для имитации слабых устройств.
  3. Request throttling – ограничение количества одновременных запросов или скорость их обработки.

Каждый из этих типов может быть настроен отдельно или комбинирован для имитации конкретных пользовательских условий.


Настройка сетевых параметров

Сетевой throttling управляется через параметры:

  • rttMs – задержка в миллисекундах (Round Trip Time)
  • throughputKbps – скорость передачи данных в килобитах в секунду
  • requestLatencyMs – дополнительная задержка на уровне запроса

Пример кастомного профиля:

const customNetworkThrottling = {
  rttMs: 150,
  throughputKbps: 1200,
  requestLatencyMs: 50
};

Эта конфигурация имитирует типичное мобильное соединение 3G с небольшими пиковыми задержками.


Настройка CPU throttling

CPU throttling управляется коэффициентом замедления (cpuSlowdownMultiplier). Он задает, во сколько раз процессорная нагрузка будет увеличена для симуляции слабого устройства.

const customCPUThrottling = {
  cpuSlowdownMultiplier: 4
};

Коэффициент 4 означает, что JavaScript будет выполняться в четыре раза медленнее, что позволяет протестировать время рендеринга на слабых мобильных устройствах.


Интеграция кастомного throttling в Lighthouse

Для использования кастомных настроек необходимо передавать их через config при запуске Lighthouse. Основные шаги:

  1. Создать объект конфигурации с нужными параметрами.
  2. Указать кастомный throttling внутри settings.
  3. Вызвать Lighthouse с этой конфигурацией.

Пример:

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

(async () => {
  const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
  const options = {
    port: chrome.port,
    settings: {
      throttlingMethod: 'simulate', // или 'devtools'
      throttling: {
        rttMs: 150,
        throughputKbps: 1200,
        cpuSlowdownMultiplier: 4,
        requestLatencyMs: 50
      }
    }
  };

  const result = await lighthouse('https://example.com', options);
  console.log(result.lhr.categories.performance.score);

  await chrome.kill();
})();
  • throttlingMethod: 'simulate' – позволяет имитировать слабое устройство без изменения системных настроек.
  • throttlingMethod: 'devtools' – применяет настройки напрямую через DevTools Protocol.

Комбинирование сетевого и CPU throttling

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

const combinedThrottling = {
  rttMs: 200,
  throughputKbps: 800,
  cpuSlowdownMultiplier: 6,
  requestLatencyMs: 100
};

При такой конфигурации Lighthouse сможет более реалистично показать First Contentful Paint, Time to Interactive и другие метрики, которые сильно зависят от скорости сети и процессора.


Использование кастомных профилей для CI/CD

Включение кастомного throttling в автоматизированные тесты позволяет:

  • Отслеживать деградацию производительности при изменении кода.
  • Проверять отклик на медленных устройствах.
  • Формировать стабильные отчеты, независимо от текущей пропускной способности сети разработчика или сервера.

Пример конфигурации для CI:

settings: {
  throttlingMethod: 'simulate',
  throttling: {
    rttMs: 300,
    throughputKbps: 500,
    cpuSlowdownMultiplier: 6,
    requestLatencyMs: 150
  },
  onlyCategories: ['performance']
}

Советы по использованию кастомного throttling

  • Использовать realistic profiles: Сравнивать показатели с реальными устройствами и сетями для точной оценки.
  • Тестировать отдельные метрики: CPU throttling влияет на JavaScript-heavy страницы сильнее, чем на статический контент.
  • Комбинировать с эмуляцией устройств: Совместное использование кастомного throttling и emulatedFormFactor (mobile/desktop) дает наиболее достоверные результаты.
  • Сохранять конфигурации: Для стабильности тестов в разных средах лучше хранить профили в JSON и подключать их при запуске.

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