Files
cherrypick/benchmark_di/REPORT.ru.md

77 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Сравнительный бенчмарк DI: cherrypick vs get_it vs riverpod
## Параметры запуска
| Параметр | Значение |
|------------------|------------------------|
| --benchmark | all |
| --chainCount (-c)| 10, 100 |
| --nestingDepth (-d)| 10, 100 |
| --repeat (-r) | 5 |
| --warmup (-w) | 2 |
| --format (-f) | markdown |
| --di | cherrypick, get_it, riverpod |
---
## Описание бенчмарков
1. **RegisterSingleton** — регистрация и резолвинг singleton.
2. **ChainSingleton** — цепочка singleton по имени.
3. **ChainFactory** — stateless цепочка из factory.
4. **AsyncChain** — асинхронная цепочка.
5. **Named** — именованный lookup.
6. **Override** — оверрайд регистрации и резол-в scope.
---
## Сравнительная таблица: chainCount=10, nestingDepth=10 (Mean, PeakRSS)
| Сценарий | cherrypick Mean (мкс) | cherrypick PeakRSS | get_it Mean (мкс) | get_it PeakRSS | riverpod Mean (мкс) | riverpod PeakRSS |
|--------------------|----------------------:|-------------------:|------------------:|---------------:|--------------------:|-----------------:|
| RegisterSingleton | 10.00 | 273104 | 15.20 | 261872 | 13.00 | 268512 |
| ChainSingleton | 10.20 | 271072 | 1.00 | 262000 | 41.20 | 268784 |
| ChainFactory | 5.00 | 299216 | 5.00 | 297136 | 43.80 | 271296 |
| AsyncChain | 43.40 | 290640 | 23.40 | 342976 | 105.20 | 285920 |
| Named | 1.00 | 297008 | 1.00 | 449824 | 2.20 | 281136 |
| Override | 5.40 | 297024 | 0.00 | 449824 | 30.20 | 281152 |
## Максимальная нагрузка: chainCount=100, nestingDepth=100 (Mean, PeakRSS)
| Сценарий | cherrypick Mean (мкс) | cherrypick PeakRSS | get_it Mean (мкс) | get_it PeakRSS | riverpod Mean (мкс) | riverpod PeakRSS |
|--------------------|----------------------:|-------------------:|------------------:|---------------:|--------------------:|-----------------:|
| RegisterSingleton | 1.00 | 271072 | 1.20 | 262000 | 2.00 | 268688 |
| ChainSingleton | 49.20 | 303312 | 1.20 | 297136 | 253.20 | 270784 |
| ChainFactory | 45.00 | 293952 | 51.80 | 342720 | 372.80 | 308640 |
| AsyncChain | 261.60 | 297008 | 25.00 | 450640 | 821.80 | 285968 |
| Named | 1.00 | 297008 | 1.00 | 449824 | 2.00 | 281136 |
| Override | 226.60 | 301632 | 1.80 | 477344 | 498.60 | 294752 |
---
## Пояснения к сценариям
- **RegisterSingleton** — базовый тест DI (регистрация и резолвинг singleton)
- **ChainSingleton** — deep singleton-цепочка (поиск по имени)
- **ChainFactory** — цепочка через factory (stateless)
- **AsyncChain** — async factory/граф
- **Named** — именованный resolve
- **Override** — переопределения и тестовые scope
---
## Выводы
- **GetIt** — рекордно быстр во всех сценариях и использует минимум памяти даже при экстремальной глубине/ширине цепочек.
- **Cherrypick** — хорошо масштабируется, особенно на простых/именованных сценариях и production-архитектурах, но уступает по скорости на сложных/длинных цепях.
- **Riverpod** — хорошо справляется с простыми/именованными сценариями, но время и память заметно растут на глубине или при асинхронных и override-сценариях.
### Рекомендации
- **GetIt** — для максимальной производительности (игры, MVP, быстрые интерфейсы, CLI)
- **Cherrypick** — для сложных архитектур, codegen, тестирования, когда нужны scopes и проверка зависимостей.
- **Riverpod** — если требуется реактивность, интеграция во Flutter, либо сочетается с Riverpod-state.
---
_Актуально на 7 августа 2025. Полная нагрузочная матрица, скрипты находятся в open-source._