mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-24 05:25:19 +00:00
5.4 KiB
5.4 KiB
Сравнительный бенчмарк DI: cherrypick vs get_it vs riverpod
Параметры запуска
| Параметр | Значение |
|---|---|
| --benchmark | all |
| --chainCount (-c) | 10, 100 |
| --nestingDepth (-d) | 10, 100 |
| --repeat (-r) | 5 |
| --warmup (-w) | 2 |
| --format (-f) | markdown |
| --di | cherrypick, get_it, riverpod |
Описание бенчмарков
- RegisterSingleton — регистрация и резолвинг singleton.
- ChainSingleton — цепочка singleton по имени.
- ChainFactory — stateless цепочка из factory.
- AsyncChain — асинхронная цепочка.
- Named — именованный lookup.
- Override — оверрайд регистрации и резол-в scope.
Сравнительная таблица: chainCount=10, nestingDepth=10 (Mean, PeakRSS)
| Сценарий | cherrypick Mean (мкс) | cherrypick PeakRSS | get_it Mean (мкс) | get_it PeakRSS | riverpod Mean (мкс) | riverpod PeakRSS |
|---|---|---|---|---|---|---|
| RegisterSingleton | 10.00 | 273104 | 15.20 | 261872 | 13.00 | 268512 |
| ChainSingleton | 10.20 | 271072 | 1.00 | 262000 | 41.20 | 268784 |
| ChainFactory | 5.00 | 299216 | 5.00 | 297136 | 43.80 | 271296 |
| AsyncChain | 43.40 | 290640 | 23.40 | 342976 | 105.20 | 285920 |
| Named | 1.00 | 297008 | 1.00 | 449824 | 2.20 | 281136 |
| Override | 5.40 | 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 | 1.00 | 271072 | 1.20 | 262000 | 2.00 | 268688 |
| ChainSingleton | 49.20 | 303312 | 1.20 | 297136 | 253.20 | 270784 |
| ChainFactory | 45.00 | 293952 | 51.80 | 342720 | 372.80 | 308640 |
| AsyncChain | 261.60 | 297008 | 25.00 | 450640 | 821.80 | 285968 |
| Named | 1.00 | 297008 | 1.00 | 449824 | 2.00 | 281136 |
| Override | 226.60 | 301632 | 1.80 | 477344 | 498.60 | 294752 |
Пояснения к сценариям
- RegisterSingleton — базовый тест DI (регистрация и резолвинг singleton)
- ChainSingleton — deep singleton-цепочка (поиск по имени)
- ChainFactory — цепочка через factory (stateless)
- AsyncChain — async factory/граф
- Named — именованный resolve
- Override — переопределения и тестовые scope
Выводы
- GetIt — рекордно быстр во всех сценариях и использует минимум памяти даже при экстремальной глубине/ширине цепочек.
- Cherrypick — хорошо масштабируется, особенно на простых/именованных сценариях и production-архитектурах, но уступает по скорости на сложных/длинных цепях.
- Riverpod — хорошо справляется с простыми/именованными сценариями, но время и память заметно растут на глубине или при асинхронных и override-сценариях.
Рекомендации
- GetIt — для максимальной производительности (игры, MVP, быстрые интерфейсы, CLI)
- Cherrypick — для сложных архитектур, codegen, тестирования, когда нужны scopes и проверка зависимостей.
- Riverpod — если требуется реактивность, интеграция во Flutter, либо сочетается с Riverpod-state.
Актуально на 7 августа 2025. Полная нагрузочная матрица, скрипты находятся в open-source.