Files
cherrypick/benchmark_di/REPORT.ru.md

5.4 KiB
Raw Blame History

Сравнительный бенчмарк 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

Описание бенчмарков

  1. RegisterSingleton — регистрация и резолвинг singleton.
  2. ChainSingleton — цепочка singleton по имени.
  3. ChainFactory — stateless цепочка из factory.
  4. AsyncChain — асинхронная цепочка.
  5. Named — именованный lookup.
  6. 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.