advanced

Ловушки бенчмарков

Избегайте ложных выводов из-за warmup, нереалистичных данных, coordinated omission, артефактов cache, средних и шумных окружений.

Бенчмарки легко врут. Типичные ловушки: игнор cold warmup JVM/Node, нереалистичные данные, coordinated omission, артефакты cache, сравнение только средних, шумные shared CI машины и micro-benchmarks без связи с системой.

| Ловушка | Эффект | |---------|--------| | Нет warmup | Первые прогоны искажают результат | | Крошечный dataset | Всё в L1 cache | | Coordinated omission | Tool ждёт медленные ответы, скрывает tail latency | | Только среднее | Катастрофа p99 невидима | | Оптимизация цикла | V8 выкидывает неиспользуемый результат |

					// Гигиена: warmup + много итераций
for (let i = 0; i < 50; i++) run();
const samples = [];
for (let i = 0; i < 200; i++) samples.push(time(run));
reportPercentiles(samples);
				

Предпочитайте **production-like** нагрузки и A/B deploy с field metrics вместо localhost micro-benchmark wins. В `benchmark.js` и аналогах не давайте оптимизатору удалить работу.

На интервью: coordinated omission; зачем p95/p99; регрессия в lab, но не в field (и наоборот); значимость при variance.

Типовые ошибки: победа по одному Lighthouse; бенчмарк dev bundles; разное железо без нормализации.

Компромисс — быстрый local feedback против выводов, которые выдерживают production.

Чеклист:

  • Warmup; отчёт по перцентилям.
  • Реалистичные объёмы данных.
  • Перекрёстная проверка traces и RUM.
  • Скепсис к micro-benchmark wins.