mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-23 21:13:35 +00:00
2.7 KiB
2.7 KiB
Сравнительный отчет DI-бенчмарка: cherrypick vs get_it vs riverpod vs kiwi
Параметры запуска:
- chainCount = 100
- nestingDepth = 100
- repeat = 5
- warmup = 2
Описание сценариев
- RegisterSingleton — регистрация и получение singleton (базовая скорость DI).
- ChainSingleton — цепочка зависимостей A → B → ... → N (singleton). Глубокий singleton-резолвинг.
- ChainFactory — все элементы цепочки — factory. Stateless построение графа.
- AsyncChain — асинхронная цепочка (async factory). Тест async/await графа.
- Named — регистрация двух биндингов с именами, разрешение по имени.
- 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.