момент Guide to Programming with Zend Framework by Cal Evans
Посмотрел начало книжечки php|architect’s Guide to Programming with Zend Framework by Cal Evans
Там товарищ Кал Еванс пишет:
>> It’s just that easy. Since we are storing the instance of Zend_Config_Ini the first time
>> we call getConfig() there is no performance penalty to making multiple calls.
Якобы вызов многоразовый вызов getConfig() вместо прямого обращения к объекту не отражается на производительности и не стоит
волновать по этому поводу. Спички конечно, но сишники бы затоптали точно.
Набросаем код теста подобного синглетона.
class test_class {
protected $index = 0;
public static $_instance;
public static function getInstance( ) { if (!self::$_instance) { self::$_instance = new self; } return self::$_instance; }
public static function destroy() { self::$_instance = null; }
public function run() { $this->index++; }
public function getIndex() { return $this->index; }
}
function test($count) {
echo "\nTesting for {$count} \n\n";
test_class::destroy();
// 1
$time = xdebug_time_index();
$test = test_class::getInstance();
for ($i=0; $i<$count; $i++) {
$test->run();
}
$time = xdebug_time_index() - $time;
printf("1) %.8f (%d) \n", $time, $test->getIndex());
// 2
test_class::destroy();
$time = xdebug_time_index();
for ($i=0; $i<$count; $i++) {
test_class::getInstance()->run();
}
$time = xdebug_time_index() - $time;
printf("2) %.8f (%d) \n", $time, test_class::getInstance()->getIndex());
}
test(10);
test(100);
Результаты теста:
Testing for 10
1) 0.00016785 (10)
2) 0.00012207 (10)
Testing for 100
1) 0.00054193 (100)
2) 0.00106192 (100)
Видно, что в первом случае получение инстанса объекта, и дальнейшее обращение напрямую к экземпляру практически в два раза быстрее,
чем каждоразовое обращение к синглетону через getInstance().
П.С.: Порадовало название раздела книги "Super Secret Ninja Class: Globals.php"...
Здесь можно скачать PDF версию книги php|architect’s Guide to Programming with Zend Framework.
@author: surg30n
@date: Вторник, 26 Август 2008
Комментарии : 2
|
2] surg30n - 12:42, 20 Октябрь, 2008
|
Привет.
Этот тест всего лишь доказывает, что "there is no performance penalty to making multiple calls" неверно. Хотя в контексте примера автора - из двух обращений, конечно никакого пенальти нет.
|
|
1] Гость - 06:28, 16 Октябрь, 2008
|
Привет!
То есть ты хочешь сказать, что суть приложения должна состоять из цикла вызовов конфига? :)
Многие сишники, "отрывающие головы", пишут такой код, что уж лучше, когда приложение работает на микросекунды дольше, чем когда процесс разработки/доработки занимает на несколько месяцев больше....
|