Время выполнения PHP скрипта
Зачастую, в больших и громоздких приложениях достаточно сложно найти ресурсоемкие ("слабые") части. Значительную роль в решении этой проблемы играет анализ процесса исполнения приложения, а именно отметки затраченного времени на исполнение разных задач. Данную проблему можно искоренить еще на ранних этапах разработки, еще до того, как приложение достигнет внушительных размеров. Для этого, всего лишь, необходимо с самого начала производить измерение скорости выполнения подпрограмм и оптимизировать алгоритмы в процессе их создания.
Переходя к самому коду, измерение скорости выполнения оказалась весьма простой задачей, достаточно уметь пользоваться API и вычислением. В данном примере мы рассмотрим реализацию на PHP.
В PHP есть функция microtime(), которая возвращает строкой секунды и микросекунды из timestamp, которые нам нужно преобразовать в вещественное число (десятичная дробь):
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
В PHP, начиная с версии 5.0.0 можно получить уже преобразованное число, для этого достаточно передать функции значение true.
$mtime = microtime(true);
Как вы уже наверно поняли, алгоритм очень простой – мы засекаем время старта скрипта, а потом просто вычитанием определяем время выполнения.
Ниже приведена уже написанная функция для измерения времени выполнения скрипта.
function runtime($type='0',$mark=NULL)
{
global $_runtime_microsec;
/* Надо вернуть разницу? */
if( $mark!==NULL ) if( isset($_runtime_microsec[$type]) && isset($_runtime_microsec[$mark]) ) return sprintf("%f", $_runtime_microsec[$mark]-$_runtime_microsec[$type]);
if( PHP_VERSION >= '5.0.0' )
{
$mtime = microtime(true);
}
else
{
$mtime = microtime();
$mtime = explode(" ", $mtime);
$mtime = $mtime[1] + $mtime[0];
}
/* Засекаем время */
if( !is_array($_runtime_microsec) ) $_runtime_microsec = array();
if( !isset($_runtime_microsec[$type]) )
{
$_runtime_microsec[$type] = $mtime;
}
/* Вычисляем время */
$mtime -= $_runtime_microsec[$type];
/* Форматируем вывод */
$mtime = sprintf("%f", $mtime);
return $mtime;
}
Пользоваться данной функцией весьма просто:
/* Первый ее вызов – инициализация */
runtime();
/* трудоемкий кусок программы */
echo "Выполнено за: ".runtime()."<br />";
/* подпрограмма 2 */
echo "Выполнено за: ".runtime()."<br />";
runtime('start_sleep');
sleep(4);
runtime('end_sleep');
runtime('prog3'); /* Засекаем выполнение подпрограммы 3 */
/* подпрограмма 3 */
echo "Подпрограмма 3 выполнена за: ".runtime('prog3')."<br />";
echo "Sleep marks: ".runtime('start_sleep','end_sleep')."<br />";
Я оптимизировал свой код, а ты? ))
Удачного Вам программинга!
Комментарии (2)
А что это??
if( !isset($_runtime_microsec[$type]) )
{
$_runtime_microsec[$type] = $mtime;
}
Ну как, там же коммент есть - это сохранение засеченного времени в глобальную переменную.
В если вопрос “как оно работает”, то:
если не установлено значение(if(!isset($_runtime_microsec[$type]))), то засекаем $_runtime_microsec[$type] = $mtime;