Comments 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 не так часто используется, особенно когда несколько ссылок.
// Transient dependencies injected
Спасибо. Извиняюсь за свою наглость, но посмотрев профайлером код, оказалось, что столь низкие показатели следствие бага (в последних версиях), а не глобальный косяк.
Если будет лишняя минутка то я был бы рад, обновлению диаграммы (можно даже двух) с версией библиотеки 4.2.0 (а то совсем стыдно за текущую). Так как у меня после исправления, цифры на resolve получаются на много лучше (в 6-7 раз).
Я кстати еще заметил один нюанс (который не сильно сказывается на общую картину, но всеже). Тесты проводятся в дебаг режиме, а как по мне производить тесты скорости правильнее в релиз — там всеже оптимизации включаются, и различные дебаг вещи выключаются.
P.S. Но в любом случае, статья завела механизм — теперь перепишу код, чтобы просто стать не в конкуренции в плане производительности :)
P.P.S. У себя я тестировал в debug/release и iphone XR и SE. Кое где даже быстрее swinject.
DI в iOS: Complete guide