Как стать автором
Обновить

Комментарии 7

Спасибо за статью. Особенно с сравнения.


Посмотрел на второй график. Походу надо снова оптимизировать. Уже давно хочу. С появлением отложенных внедрений сильно всё замедлилось внутри (до них обгонял swinject даже на простых кейсах с маленьким количеством).


Но всеравно вопрос, что именно во втором тесте было? Можно получить пример кода? Он будет отличной отправной точкой и performance тестом при оптимизации ядра.


А то все эти lazy, provide, many, arg, tag слишком много времени отъедают даже если не используются. А именно они самые долгие — as/is очень дорогие операции.

Ай извиняюсь. Ссылки то я и пропустил… Всё вопрос отпал. Ещё раз спасибо за статью

Небольшое замечание:


  • DITranqullity использует prototype
  • Swinject использует transient
  • Dip использует shared, а аналог это unique
  • EasyDI использует по умолчанию, не знаю какой это, но prototype закометирован.

Это по поводу injection зависимостей. А на них это важно — одно дело создать 10 объектов всего, другое создать порядка 50 :) и тут явно DIP выбивается.


Для TestClass не так критично, но для корректности конечно тоже лучше одинаковый scope.


P.S. при желании можно тест расширить и сделать два графика (prototype/objectGraph). И мне кажется objectGraph более приближенно к реальности будет — prototype не так часто используется, особенно когда несколько ссылок.

Привет! В описанных в статье тестах использовались только objectGraph/graph/shared скоупы (В EasyDI тоже objectGraph по умолчанию). Извиняюсь, что немного запутал, поправил кое-что в репозитории. Забыл удалить эксперименты со скоупами во втором тесте. Хотел добавить третий тест, где для injected зависимостей использовал бы transient/prototype скоупы, но результаты были аналогичны второму тесту и я решил в статью его не добавлять. Если интересно, можно найти результаты по комменту:
// Transient dependencies injected

Спасибо. Извиняюсь за свою наглость, но посмотрев профайлером код, оказалось, что столь низкие показатели следствие бага (в последних версиях), а не глобальный косяк.


Если будет лишняя минутка то я был бы рад, обновлению диаграммы (можно даже двух) с версией библиотеки 4.2.0 (а то совсем стыдно за текущую). Так как у меня после исправления, цифры на resolve получаются на много лучше (в 6-7 раз).


Я кстати еще заметил один нюанс (который не сильно сказывается на общую картину, но всеже). Тесты проводятся в дебаг режиме, а как по мне производить тесты скорости правильнее в релиз — там всеже оптимизации включаются, и различные дебаг вещи выключаются.


P.S. Но в любом случае, статья завела механизм — теперь перепишу код, чтобы просто стать не в конкуренции в плане производительности :)


P.P.S. У себя я тестировал в debug/release и iphone XR и SE. Кое где даже быстрее swinject.

Спасибо за замечание про дебаг режим! Обновил график с замерами в релизной конфигурации. Обновил также и DITranquillity до 4.2 заодно. Ускорение очень приличное получилось.
Как человек, проработавший с DITranqility больше 2х лет скажу, что библиотека хороша! Но английский там очень страдает. Если сделать качественный перевод на английский всех логов и документации, то DITranqility сможет легко обогнать Swinject по количеству звезд на гитхабе.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий