PHP-скрипты: тестируем скорость работы тестировщика

Октябрь 31, 2007

Принимая решение, о том, как же все-таки измерять быстродействие того либо иного метода кодинга, я решил остановиться на тестировании 2-х обкаточных методиках.

Первая: использование стандартных функций microtime и time из стандартной библиотеки функций php
Вторая: использование самописной «нестандартной» методики. Заключается в том, чтобы использовать бинарь data для получения информации о текущем времени.

Тестирование.
Проведем небольшой тест: 500000 раз спросим у сервера: «Который миллисекунд?» :)

код:


<?php

// Старт процесса. „Который секунд?“
$limit = 500000;

while ($limit)
{// Который миллисекунд?
$limit — -;
}
// Стоп процесса. „Который секунд?“
?>

Код стандартного снятия времени старта и конца теста:


<?php

$av_time_arr = array ();
$tmp_arr = array ();
$tmp_arr = explode (' ',microtime ());
$ex_start_mtime = $tmp_arr[0]+$tmp_arr[1];

$limit = 500000;
while ($limit)
{
$tmp_arr = explode (' ',microtime ());
$av_time_arr[$limit]= $tmp_arr[0]+$tmp_arr[1];
$limit — -;
}

$tmp_arr = explode (' ', microtime ());
$ex_stop_mtime= $tmp_arr[0]+$tmp_arr[1];
$ex_mtime = ($ex_stop_mtime-$ex_start_mtime);

echo 'Время старта скрипта: '.$ex_start_mtime.' cек';
echo '<br />Время остановки скрипта: '.$ex_stop_mtime.' сек';
echo '<br />Время работы скрипта: '.$ex_mtime.' секунд';
?>

У меня на ноутбуке(Cel 1.6) это время ориентировочно равно 3.5-3.8 секунды.
Теперь перепишем данный код на использование через бинарники :) Если кто-то думает, что мы сейчас будем запускать бинарник 500.000 раз — тот очень сильно заблуждается (хотя... я бы посмотрел на камикадзе, рискнувшего данные штуки проделать :))
Пару минут и получаем слудующий код:


<?php

define ('SECNANOTIME', '/bin/date +%s_%N');
$tmp_arr = explode ('_',exec (SECNANOTIME));
$ex_start_mtime = $tmp_arr[0]+('0.'.$tmp_arr[1]);

$limit = 500000;
while ($limit)
{
$tmp_arr = explode ('_',microtime ());
$av_time_arr[$limit]= $tmp_arr[0]+('0.'.$tmp_arr[1]);
$limit — -;
}

$tmp_arr = explode ('_', exec (SECNANOTIME));
$ex_stop_mtime = $tmp_arr[0]+('0.'.$tmp_arr[1]);
$ex_mtime = ($ex_stop_mtime-$ex_start_mtime);

echo 'Время старта скрипта: '.$ex_start_mtime.' cек';
echo '<br />Время остановки скрипта: '.$ex_stop_mtime.' сек';
echo '<br />Время работы скрипта: '.$ex_mtime.' секунд';
?>

Получаем результат 4-4.3 секунды... Чтож, значит, что бинарники работают медленнее, чем стандартные функции? На самом деле, конечно же, нет... Вся причина в том, что дважды запускается бинарник. А это, конечно же дополнительное время. Однако, этого достаточно, чтобы сделать определенный вывод: систему анализа быстродействия лучше писать стандартными функциями, особо не заморачиваясь.

А о том, как эффективно использовать бинарные приложения — в следующей статье.

Комметирование закрыто.