Измерение скорости работы скрипта
Измерение скорости работы скрипта
Для каждого программиста рано или поздно становится важным определение "узких мест" при работе скрипта или всего проекта. Особенно когда проект разростается - отслеживать самые медленные точки тяжело или практически невозможно. Потому очень важно иметь удобный инструмент для мониторинга таких вещей. В этой статье я предлагаю написать класс, который будет отслеживать время работы отдельных участков PHP скриптов. Сначала создадим сам класс, а потом сможем его применять во всех наших скриптах, для которых нужно установить время работы. Итак, класс выглядит следующим образом:
<?php
set_time_limit(0);
class timer
{
private $start_time;
private function get_time()
{
list($usec, $seconds) = explode(" ", microtime());
return ((float)$usec + (float)$seconds);
}
function start_timer()
{
$this->start_time = $this->get_time();
}
function end_timer()
{
return ($this->get_time() - $this->start_time);
}
}
?>
Назовем наш класс "timer.class.php" и рассмотрим его поближе. Первая строка "set_time_limit(0);" определяет максимальное время работы нашего скрипта.
Т.к. нам нужна максимальная точность - передаем в каестве параметра ноль. Дальше идет собственно обьявление класса timer. Ниже мы видим обьявление трех методов класса:
- get_time
- start_timer
- end_timer
Гораздо интереснее можно использовать этот класс. Кроме того это делать можно почти в каждом большом скрипте, достаточно всего лишь подключить ваш класс "timer.class.php" к скрипту, время работы которого вы хотите измерить. Для примера давайте измерим время выполнения двух методов сложения чисел:
Мы узнаем что работает быстрее:
- $z += $i
- $z = $z+$i
<?php
include("timer.class.php");
$timer = new timer();
$z = 0;
//---------------------
$timer->start_timer();
//---------------------
for($i=0; $i<10000; $i++)
{
$z += $i;
}
$z = 0;
//----------------------
$firstTime = $timer->end_timer();
//----------------------
echo('Код "$z += $i" работал '.$firstTime.'с.<br />');
//---------------------
$timer->start_timer();
//---------------------
for($i=0; $i<10000; $i++)
{
$z = $z+$i;
}
$z = 0;
//----------------------
$secondTime = $timer->end_timer();
//----------------------
echo('Код "$z = $z+$i" работал '.$secondTime.'с.<br />');
?>
У меня получился такой результат:
Код "$z += $i" работал 0.00566005706787с. Код "$z = $z+$i" работал 0.00641202926636с.Получается что по производительности эти два варианта практически равны. Если же рассмотреть использование нашего класса здесь - то оно также не является сложным. Сначала мы подключаем класс используя функцию include, далее создаем обьект класса: $timer = new timer();. Потом "засекаем" текущее время используя $timer->start_timer(); после этого могут идти функции/методы вашего кода которые вы хотите проверить на скорость работы (я использовал цикл на 10 000 итераций для примера), а затем получаем время работы блока кода используя код $firstTime = $timer->end_timer();. После чего в нашей переменной $firstTime будет содержаться время работы первоко цикла. Как вы видите сам класс довольно простой, и его использование не вызывает никаких трудностей. Спасибо за внимание :)
Информация о статье "Измерение скорости работы скрипта"
DeVoid |
http://devoid.com.ua/ |
31 Мая 2008 |
Просмотрели 3284 раз
КОММЕНТАРИИ (1)
Зарегистрируйтесь или выполните Вход для того чтобы оставлять комментарии
Не менее интересно
- PHP и array_map. Использование обратных вызовов массивов
- sscanf - сканирование форматированных строк в PHP
- Как узнать размер базы данных MySQL через PHP
- Получение реального IP-адреса пользователя в РНР
- Создание Rollover Image с использованием CSS
- Сжатие XHTML страниц с использованием PHP Output Buffers
- PHP-класс для работы с AlexaRank
- PHP и его история
- Как верстать сайт? Шаблонная вёрстка сайта
- Коды ответов HTTP-сервера



не проще ли?
$s=microtime(1);
...
printf("%0.4f",microtime(1)-$s);