Files
cherrypick/benchmark_di/REPORT.ru.md

49 lines
2.7 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 vs kiwi
## Параметры запуска:
- chainCount = 100
- nestingDepth = 100
- repeat = 5
- warmup = 2
## Описание сценариев
1. **RegisterSingleton** — регистрация и получение singleton (базовая скорость DI).
2. **ChainSingleton** — цепочка зависимостей A → B → ... → N (singleton). Глубокий singleton-резолвинг.
3. **ChainFactory** — все элементы цепочки — factory. Stateless построение графа.
4. **AsyncChain** — асинхронная цепочка (async factory). Тест async/await графа.
5. **Named** — регистрация двух биндингов с именами, разрешение по имени.
6. **Override** — регистрация биндинга/цепочки в дочернем scope.
---
## Сравнительная таблица: chainCount=100, nestingDepth=100, repeat=5, warmup=2 (среднее время, мкс)
| Сценарий | cherrypick | get_it | riverpod | kiwi |
|------------------|------------|--------|----------|------|
| chainSingleton | 47.6 | 13.0 | 389.6 | 46.8 |
| chainFactory | 93.6 | 68.4 | 678.4 | 40.8 |
| register | 67.4 | 10.2 | 242.2 | 56.2 |
| named | 14.2 | 10.6 | 10.4 | 8.2 |
| override | 42.2 | 11.2 | 302.8 | 44.6 |
| chainAsync | 519.4 | 38.0 | 886.6 | |
---
## Краткий анализ и рекомендации
- **get_it** и **kiwi** — самые быстрые в большинстве синхронных сценариев.
- **cherrypick** надежен и быстр, только немного медленнее.
- **riverpod** заметно проигрывает на глубоко вложенных и async-графах.
- **Асинхронный сценарий**: get_it — абсолютный лидер, cherrypick и riverpod значительно медленнее, kiwi не поддерживает async.
- **named** lookup отрабатывает быстро во всех DI.
### Рекомендации
- Используйте **get_it** или **kiwi** для максимальной производительности и простоты.
- **cherrypick** хорош для масштабируемых решений с небольшой задержкой.
- **riverpod** оправдан только для Flutter и простых графов.
---
_Обновлено: 19 августа 2025._