Анализ и улучшение производительности
Получить сопоставимые исходные измерения
Определи затронутую пользовательскую операцию, границы метрики, цель, нагрузку и окружение. Зафиксируй объём и распределение данных, параллелизм или интенсивность поступления запросов, состояние кеша, ошибки и существенные ограничения ресурсов. Без пригодных исходных измерений сначала добавь или собери измерения; не заявляй об оптимизации только по интуиции.
Исследовать до изменения
- Разделяй выполнение сервиса, ожидание в очереди, ожидание зависимостей, сетевое время и отрисовку клиента вдоль затронутого пути. Высокое потребление ресурса может быть следствием, а не ограничивающим этапом. Сопоставляй наблюдения и проверяй конкретную причинную гипотезу.
- Изучай характерные медленные случаи вместе с агрегатами. Хвост распределения могут определять разные операции или размеры данных; улучшенное среднее может скрыть регрессию именно той операции, на которую жалуются пользователи.
- Сравнивай одинаковые условия. Прогретый кеш, меньший набор данных, меньшая подаваемая нагрузка или выросшая доля ошибок могут создать видимость ускорения без улучшения системы. Сохраняй в сравнении корректность, полноту результата и проверки авторизации.
- Предлагая кеширование, пакетную обработку, параллелизм или сокращение обменов, укажи возникающие компромиссы согласованности, инвалидации, памяти и обработки сбоев, которые относятся к изменению. Кеш должен сохранять границы видимости данных; неограниченный параллелизм может перенести узкое место в зависимость.
- По возможности меняй одну существенную причину за раз и повторяй измерения достаточно, чтобы увидеть разброс между запусками. При необходимости оставляй сравнение без изменения; не приписывай патчу каждое наблюдаемое колебание.
Не оптимизируй посторонние пути только потому, что они попали в профилировщик. Предпочитай измеримое ограниченное улучшение широкой переработке. Для зависящих от версии механизмов оптимизации используй документацию движка или framework.
Результат и проверка
Верни диагноз, прицельное изменение или обоснованную рекомендацию, воспроизводимые условия измерения, результаты до и после и существенные компромиссы. Отличай гипотезу об узком месте от вывода, подкреплённого изменением одного из условий.
Вместе со скоростью проверь функциональный инвариант, затронутый оптимизацией. Не жертвуй корректностью или безопасностью незаметно: предлагаемое ослабление требует явного решения проекта в рамках действующих правил.
Укажи оставшиеся узкие места и ограничения тестового окружения без прогноза неизмеренной ёмкости production. templates/performance-report.md необязателен и применяется при доступном репозитории; существенный результат — доказательства и их трактовка.