Тест.
Классы:
class A {
public $B;
function __construct (B $B) {
$this->B = $B;
}
function test () {
return $this->B->run();
}
}
class B {
public $C;
function __construct (C $C) {
$this->C = $C;
}
function run () {
return $this->C->get();
}
}
class C {
function get () {
return __CLASS__;
}
}
Код тестирования без DIC. Время: 0.157
$time = microtime(true);
$i = 0;
while($i <= 1000) {
$C = new C;
$B = new B($C);
$A = new A($B);
echo $A->test();
$i++;
}
echo '<br>Время: '.round(microtime(true) - $time, 4);
Код тестирования рефлексии. Время: 1.101
$DI = new \library\DI();
$time = microtime(true);
$i = 0;
while($i <= 1000) {
echo $DI->get('A')->test();
$i++;
}
echo '<br>Время: '.round(microtime(true) - $time, 4);
Код тестирования контейнера. Время: 0.148
$DI = new \library\DI();
$DI->set('A', $DI->get('A'));
$time = microtime(true);
$i = 0;
while($i <= 1000) {
echo $DI->get('A')->test();
$i++;
}
echo '<br>Время: '.round(microtime(true) - $time, 4);
Как то так:
new - 0.157
из контейнера - 0.148
с рефлексией - 1.101
Я правда не учитывал что нужно делать new DI в цикле, он тоже какие то копейки ест, но тут никак не померишь, потому что инициализация некоторых классов может быть очень ресурсоёмкой, будет выгодней тянуть их из контейнера.
Код инициализации smarty. Время: 0.321
require_once(ROOT_DIR. '/library/smarty/libs/Smarty.class.php');
$time = microtime(true);
$i = 0;
while($i <= 1000) {
$smarty = new Smarty();
$i++;
}
echo '<br>Время: '.round(microtime(true) - $time, 4);
Код инициализации DIC в цикле и возврат объекта smarty. Время: 0.088
require_once(ROOT_DIR. '/library/smarty/libs/Smarty.class.php');
$DI = new \library\DI();
$DI->set('smarty', new Smarty(), true);
$time = microtime(true);
$i = 0;
while($i <= 1000) {
$DI = new \library\DI();
$smarty = $DI->get('smarty');
$i++;
}
echo '<br>Время: '.round(microtime(true) - $time, 4);
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2