2025-08-19 10:29:53 +03:00
|
|
|
|
# Сравнительный отчет DI-бенчмарка: cherrypick vs get_it vs riverpod vs kiwi
|
|
|
|
|
|
|
|
|
|
|
|
## Параметры запуска:
|
|
|
|
|
|
- chainCount = 100
|
|
|
|
|
|
- nestingDepth = 100
|
|
|
|
|
|
- repeat = 5
|
|
|
|
|
|
- warmup = 2
|
2025-08-07 12:11:16 +03:00
|
|
|
|
|
2025-08-08 15:00:55 +03:00
|
|
|
|
## Описание сценариев
|
2025-08-07 12:11:16 +03:00
|
|
|
|
|
2025-08-19 10:29:53 +03:00
|
|
|
|
1. **RegisterSingleton** — регистрация и получение singleton (базовая скорость DI).
|
2025-08-08 15:00:55 +03:00
|
|
|
|
2. **ChainSingleton** — цепочка зависимостей A → B → ... → N (singleton). Глубокий singleton-резолвинг.
|
2025-08-19 10:29:53 +03:00
|
|
|
|
3. **ChainFactory** — все элементы цепочки — factory. Stateless построение графа.
|
|
|
|
|
|
4. **AsyncChain** — асинхронная цепочка (async factory). Тест async/await графа.
|
2025-08-08 15:00:55 +03:00
|
|
|
|
5. **Named** — регистрация двух биндингов с именами, разрешение по имени.
|
2025-08-19 10:29:53 +03:00
|
|
|
|
6. **Override** — регистрация биндинга/цепочки в дочернем scope.
|
2025-08-07 12:11:16 +03:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2025-08-19 10:29:53 +03:00
|
|
|
|
## Сравнительная таблица: chainCount=100, nestingDepth=100, repeat=5, warmup=2 (среднее время, мкс)
|
2025-08-07 12:11:16 +03:00
|
|
|
|
|
2025-08-19 10:29:53 +03:00
|
|
|
|
| Сценарий | 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 | – |
|
2025-08-07 12:11:16 +03:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2025-08-08 15:00:55 +03:00
|
|
|
|
## Краткий анализ и рекомендации
|
2025-08-07 12:11:16 +03:00
|
|
|
|
|
2025-08-19 10:29:53 +03:00
|
|
|
|
- **get_it** и **kiwi** — самые быстрые в большинстве синхронных сценариев.
|
|
|
|
|
|
- **cherrypick** надежен и быстр, только немного медленнее.
|
|
|
|
|
|
- **riverpod** заметно проигрывает на глубоко вложенных и async-графах.
|
|
|
|
|
|
- **Асинхронный сценарий**: get_it — абсолютный лидер, cherrypick и riverpod значительно медленнее, kiwi не поддерживает async.
|
|
|
|
|
|
- **named** lookup отрабатывает быстро во всех DI.
|
2025-08-07 12:11:16 +03:00
|
|
|
|
|
2025-08-07 16:46:53 +03:00
|
|
|
|
### Рекомендации
|
2025-08-19 10:29:53 +03:00
|
|
|
|
- Используйте **get_it** или **kiwi** для максимальной производительности и простоты.
|
|
|
|
|
|
- **cherrypick** хорош для масштабируемых решений с небольшой задержкой.
|
|
|
|
|
|
- **riverpod** оправдан только для Flutter и простых графов.
|
2025-08-07 12:11:16 +03:00
|
|
|
|
|
2025-08-07 16:46:53 +03:00
|
|
|
|
---
|
2025-08-07 12:11:16 +03:00
|
|
|
|
|
2025-08-19 10:29:53 +03:00
|
|
|
|
_Обновлено: 19 августа 2025._
|