mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-24 05:25:19 +00:00
49 lines
2.7 KiB
Markdown
49 lines
2.7 KiB
Markdown
# Сравнительный отчет 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._
|