Files
cherrypick/benchmark_di/REPORT.ru.md

2.7 KiB
Raw Blame History

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

Параметры запуска:

  • chainCount = 100
  • nestingDepth = 100
  • repeat = 5
  • warmup = 2

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

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

Сравнительная таблица: chainCount=100, nestingDepth=100, repeat=5, warmup=2 (среднее время, мкс)

Сценарий cherrypick get_it riverpod kiwi
chainSingleton 47.6 13.0 389.6 46.8
chainFactory 93.6 68.4 678.4 40.8
register 67.4 10.2 242.2 56.2
named 14.2 10.6 10.4 8.2
override 42.2 11.2 302.8 44.6
chainAsync 519.4 38.0 886.6

Краткий анализ и рекомендации

  • get_it и kiwi — самые быстрые в большинстве синхронных сценариев.
  • cherrypick надежен и быстр, только немного медленнее.
  • riverpod заметно проигрывает на глубоко вложенных и async-графах.
  • Асинхронный сценарий: get_it — абсолютный лидер, cherrypick и riverpod значительно медленнее, kiwi не поддерживает async.
  • named lookup отрабатывает быстро во всех DI.

Рекомендации

  • Используйте get_it или kiwi для максимальной производительности и простоты.
  • cherrypick хорош для масштабируемых решений с небольшой задержкой.
  • riverpod оправдан только для Flutter и простых графов.

Обновлено: 19 августа 2025.