# Сравнительный отчет 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._