Skip to content
PПромтбук
RUEN
04Ревью кода

Ревью производительности

Найти узкие места: N+1, рендеры, тяжёлые операции в hot path, утечки памяти.

Ревью производительности: {{scope}}.

Подход: сначала найди hot paths (что выполняется часто или на критичном пути), потом ищи проблемы в них.

1. Hot path identification

  • Какие функции выполняются на каждый request?
  • Какие — в рендере UI?
  • Какие — на пользовательском действии?

Сначала оптимизируй их. Cold paths могут быть неэффективны — это не больно.

2. Database

  • N+1 queries — цикл с запросом внутри? используй include / join / dataloader
  • Missing indexes — частые WHERE / ORDER BY без индекса?
  • **SELECT *** — берём поля которые не нужны?
  • Транзакции — слишком длинные, держат locks?
  • Connection pooling — настроено?

3. Network

  • Лишние round-trips? (5 запросов вместо 1 batch)
  • Caching headers на API? (ETag, Last-Modified, Cache-Control)
  • Gzip / Brotli на ответы?
  • CDN для статики?

4. Memory

  • Утечки: listeners не отписываются, refs накапливаются
  • Большие объекты в closure, которые не освобождаются
  • Создание объектов на каждый рендер
  • Большие массивы которые держатся в памяти ради иногда-доступа

5. CPU

  • Тяжёлые синхронные операции в event loop (JS / Node)?
  • O(n²) там где можно O(n log n) или O(n)?
  • Regex на горячем пути с catastrophic backtracking?

6. React / Frontend

  • Лишние рендеры (нет useMemo / useCallback где нужно, неправильные dependencies)
  • Большие списки без виртуализации
  • Изображения без width/height / lazy / форматов AVIF/WebP
  • Bundle size: что грузится но не используется?
  • Code splitting: что можно вынести в lazy chunk?

7. Asset pipeline

  • Шрифты блокируют рендер? (font-display: swap)
  • JS грузится с async / defer?
  • CSS не критичный — асинхронно?

Формат отчёта

## Замеры (если делали)
Метрика | До | Цель

## Топ-проблемы

### [P0] N+1 на /api/users
Файл: ...
Импакт: 50ms → 5ms (на 100 пользователях)
Усилия: S
Фикс: добавить `include: { posts: true }`

## P1
...

## P2 / cosmetic
...

Принципы

  • Цифры важнее ощущений
  • Сначала замерь, потом оптимизируй
  • Микро-оптимизация в cold path = трата времени
  • Не оптимизируй "на всякий случай" — введёт сложность, не выгоду
К подразделу «Ревью кода»
Похожие промты