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.