« Lighttpd для отдачи статики



Base64 изображения в HTML »



Для клиента
Пользователь:
Пароль:
 

момент Guide to Programming with Zend Framework by Cal Evans

Категория: / Mine блог / PHP (LAMP)
Посмотрел начало книжечки 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
Привет!
То есть ты хочешь сказать, что суть приложения должна состоять из цикла вызовов конфига? :)
Многие сишники, "отрывающие головы", пишут такой код, что уж лучше, когда приложение работает на микросекунды дольше, чем когда процесс разработки/доработки занимает на несколько месяцев больше....
Комментировать:




Код подтверждения: *
Введите подтверждающий код, так же как он отображен на картинке.
Надоело разбирать числа на картинке? Зарегистрируся, докажи что ты не робот!

загрузка...