Files
cherrypick/benchmark_di/REPORT.ru.md

4.5 KiB
Raw Blame History

Сравнительный отчет DI-бенчмарка: cherrypick vs get_it vs riverpod

Описание сценариев

  1. RegisterSingleton — регистрация и получение объекта-синглтона (базовая скорость DI).
  2. ChainSingleton — цепочка зависимостей A → B → ... → N (singleton). Глубокий singleton-резолвинг.
  3. ChainFactory — все элементы цепочки — фабрики. Stateless построение графа.
  4. AsyncChain — асинхронная цепочка (async factory). Тестирует async/await граф.
  5. Named — регистрация двух биндингов с именами, разрешение по имени.
  6. 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