mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-24 05:25:19 +00:00
4.5 KiB
4.5 KiB
Сравнительный отчет DI-бенчмарка: cherrypick vs get_it vs riverpod
Описание сценариев
- RegisterSingleton — регистрация и получение объекта-синглтона (базовая скорость DI).
- ChainSingleton — цепочка зависимостей A → B → ... → N (singleton). Глубокий singleton-резолвинг.
- ChainFactory — все элементы цепочки — фабрики. Stateless построение графа.
- AsyncChain — асинхронная цепочка (async factory). Тестирует async/await граф.
- Named — регистрация двух биндингов с именами, разрешение по имени.
- Override — регистрация биндинга/цепочки в дочернем scope. Проверка override/scoping.
Сводная таблица: chainCount=10, nestingDepth=10 (Mean, PeakRSS)
| Сценарий | cherrypick Mean (мкс) | cherrypick PeakRSS | get_it Mean (мкс) | get_it PeakRSS | riverpod Mean (мкс) | riverpod PeakRSS |
|---|---|---|---|---|---|---|
| RegisterSingleton | 13.00 | 273104 | 8.40 | 261872 | 9.80 | 268512 |
| ChainSingleton | 13.80 | 271072 | 2.00 | 262000 | 33.60 | 268784 |
| ChainFactory | 5.00 | 299216 | 4.00 | 297136 | 22.80 | 271296 |
| AsyncChain | 28.60 | 290640 | 24.60 | 342976 | 78.20 | 285920 |
| Named | 2.20 | 297008 | 0.20 | 449824 | 6.20 | 281136 |
| Override | 7.00 | 297024 | 0.00 | 449824 | 30.20 | 281152 |
Максимальная нагрузка: chainCount=100, nestingDepth=100 (Mean, PeakRSS)
| Сценарий | cherrypick Mean (мкс) | cherrypick PeakRSS | get_it Mean (мкс) | get_it PeakRSS | riverpod Mean (мкс) | riverpod PeakRSS |
|---|---|---|---|---|---|---|
| RegisterSingleton | 4.00 | 271072 | 1.00 | 262000 | 2.00 | 268688 |
| ChainSingleton | 76.60 | 303312 | 2.00 | 297136 | 221.80 | 270784 |
| ChainFactory | 80.00 | 293952 | 39.20 | 342720 | 195.80 | 308640 |
| AsyncChain | 251.40 | 297008 | 18.20 | 450640 | 748.80 | 285968 |
| Named | 2.20 | 297008 | 0.00 | 449824 | 1.00 | 281136 |
| Override | 104.80 | 301632 | 2.20 | 477344 | 120.80 | 294752 |
Краткий анализ и рекомендации
- get_it всегда лидер, особенно на глубине/асинхронных графах.
- cherrypick заметно быстрее riverpod на сложных сценариях, опережая его в разы.
- riverpod подходит только для простых/небольших графов — при росте глубины или async/override резко проигрывает по скорости.
Рекомендации
- Используйте get_it для критичных к скорости приложений/сложных графов зависимостей.
- Выбирайте cherrypick для масштабируемых, тестируемых архитектур, если микросекундная разница не критична.
- riverpod уместен только для реактивного UI или простых графов DI.
Обновлено: 8 августа 2025