PHP: метрика времени выполнения функции

17 Apr 2014

Как нам узнать, сколько времени работает функция? Pinba, xhprof, xdebug?
Да, но их нужно ставить на сервер и последние два модуля вносят немалый оверхед. Поэтому использовать их в продакшне нежелательно.
Пинба классная, но нам нужно “вчера” и пока админ раскатывает модуль php нужно как-то извернуться.

Вспомним, что в php все неиспользуемые переменные будут удалены при выходе из функции. Ага!

class Timer {  
 private $time = 0;  
 function \_\_construct() {  
 $this-\>time = microtime(true);  
 }

function \_\_destruct() {  
 $executionTime = microtime(true) - $this-\>time;  
 // делаем все, что нам надо: логгируем или еще чего  
 }  
}

Интегрируем в проект.

function foo() {  
 $timer = new Timer();  
 // что-то делаем  
 sleep(5);  
 // на выходе будет вызван Time::\_\_destructor().  
 // Так как все объекты уничтожаются  
}

foo();