mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-23 13:03:11 +00:00
4.6 KiB
4.6 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 | yx_scope |
|---|---|---|---|---|---|
| chainSingleton | 20.6 | 14.8 | 275.2 | 47.0 | 82.8 |
| chainFactory | 90.6 | 71.6 | 357.0 | 46.2 | 79.6 |
| register | 82.6 | 10.2 | 252.6 | 43.6 | 224.0 |
| named | 18.4 | 9.4 | 12.2 | 10.2 | 10.8 |
| override | 170.6 | 11.2 | 301.4 | 51.4 | 146.4 |
| chainAsync | 493.8 | 34.0 | 5,039.0 | – | 87.2 |
Пиковое потребление памяти (Peak RSS, Кб)
| Сценарий | cherrypick | get_it | riverpod | kiwi | yx_scope |
|---|---|---|---|---|---|
| chainSingleton | 338,224 | 326,752 | 301,856 | 195,520 | 320,928 |
| chainFactory | 339,040 | 335,712 | 304,832 | 319,952 | 318,688 |
| register | 333,760 | 334,208 | 300,368 | 327,968 | 326,736 |
| named | 241,040 | 229,632 | 280,144 | 271,872 | 266,352 |
| override | 356,912 | 331,456 | 329,808 | 369,104 | 304,416 |
| chainAsync | 311,616 | 434,592 | 301,168 | – | 328,912 |
Краткий анализ и рекомендации
- get_it — абсолютный лидер по скорости и памяти на всех графах (минимальная задержка, небольшой peak RSS в любых цепочках).
- kiwi — минимальное потребление памяти в chainSingleton/Factory, но не для асинхронности.
- yx_scope — очень ровная производительность даже на сложных async/sync-цепях, иногда с пиком в памяти на override/register, но задержки всегда минимальны.
- cherrypick — стабильнее riverpod, но ощутимо уступает top-3 по латентности на длинных/async-графах; по памяти лучше yx_scope для override/named.
- riverpod — непригоден для глубоких/async-графов: память и время растут очень сильно.
- Пиковое потребление памяти: большинство DI держится в районе 320–340 Мб (большие цепи), на мелких named/factory — крайне мало.
- Стабильность: yx_scope и get_it показывают наименьшие скачки времени; у cherrypick иногда всплески на override/async, у riverpod — на async графе stddev почти равен mean!
Рекомендации
- Используйте get_it (или kiwi, если не нужен async) для максимальной производительности и минимального пикового использования памяти.
- yx_scope — идеально для production-графов с миксом sync/async.
- cherrypick — хорошо для модульных и тестируемых приложений, если не требуется абсолютная “микросекундная” производительность.
- riverpod — только если граф плоский или нужно DI только для UI во Flutter.
Обновлено: 20 августа 2025.