Время выполнения PHP скрипта

Время выполнения PHP скрипта
просмотров: 848010 января 2012 года

Зачастую, в больших и громоздких приложениях достаточно сложно найти ресурсоемкие ("слабые") части. Значительную роль в решении этой проблемы играет анализ процесса исполнения приложения, а именно отметки затраченного времени на исполнение разных задач. Данную проблему можно искоренить еще на ранних этапах разработки, еще до того, как приложение достигнет внушительных размеров. Для этого, всего лишь, необходимо с самого начала производить измерение скорости выполнения подпрограмм и оптимизировать алгоритмы в процессе их создания.

Переходя к самому коду, измерение скорости выполнения оказалась весьма простой задачей, достаточно уметь пользоваться 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 />";

Я оптимизировал свой код, а ты? smile))

Удачного Вам программинга!

Поделиться

Комментарии (2)

Алексей (5 февраля 2012 года, 16:25:16)

А что это??
if( !isset($_runtime_microsec[$type]) )
  {
      $_runtime_microsec[$type] = $mtime;
  }

Олег (6 февраля 2012 года, 00:45:23)

Ну как, там же коммент есть - это сохранение засеченного времени в глобальную переменную.

В если вопрос “как оно работает”, то:
если не установлено значение(if(!isset($_runtime_microsec[$type]))), то засекаем $_runtime_microsec[$type] = $mtime;

Что скажем?