php. Узнать время выполнения скрипта


Иногда требуется узнать время выполнения скрипта. И это можно сделать с помощью встроенных в язык PHP функций.

Можно приводить различные варианты. Зачем кому-то может потребоваться узнавать время за которое выполняется код.
Это может быть как личный интерес в тестировании на скорость выполнения чужих функций, библиотек, классов и тд.
Так и при разработке своих скриптов и замера скорости выполнения с целью дальнейшего улучшения.
Представим, что вы разработали какую-то функцию, которая выполняется в течении какого-то времени и вас не устраивает ее скорость работы.
И вы постепенно ее улучшаете. Но не совсем понятно приносят ли эти улучшения какую-то пользу в скорости выполнения или нет.
Для этого можно замерить скорость ее выполнения.

Вариант первый (Не совсем точный но подойдет как пример):
Можно воспользоваться встроенным в язык PHP классом DateTime для предоставлении даты и времен (он начал поддерживаться с PHP 5 по текущую версию PHP7).
Оговорю сразу, что в рамках данного примера для замера скорости будет использоваться функция usleep(), которая будет откладывать выполнение программы на указанное количество микросекунд. Вы можете выполнить проверку на своем коде, который необходимо проверить на скорость выполнения.

И так. Для начала отметим точку с которой необходимо начинать засекать время:

$startTime = new DateTime('now');

Создаем экземпляр класса DateTime с параметром 'now' для получения текущего времени.
После этого необходимо разместить тело тестируемого скрипта (для примера это функция usleep).
usleep(1000000); // Функция, которая откладывает время выполнения программы на 1000000 микросекунд

Теперь получаем время окончания работы скрипта:
$endTime = new DateTime('now');

И получаем разницу между началом и окончанием выполнения скрипта:
$interval = $startTime->diff($endTime);

И отображаем полученный результат в виде количества секунд и миллисекунд:
echo $interval->format('%S секунд, %f  микросекунд');

Для более подробного и полного результата можно выполнить полную распечатку результата в плоть до указания года.
$interval->format('%Y лет, %M месяцев, %D дней, %H часов, %I минут, %S секунд, %f  микросекунд'');

В результате мы должны получить время, за которое выполнится скрипт.
Скорость выполнения скрипта у меня:
01 секунд, 441 микросекунд


Весь код данного примера:
$startTime = new DateTime('now');
usleep(1000000);
$endTime = new DateTime('now');
$interval = $startTime->diff($endTime);
echo ($interval->format('%S секунд, %f  микросекунд'));


Вариант второй:
Воспользоваться встроенной функцией microtime(), которая поддерживается с PHP4 по текущую версию PHP7 на момент написания статьи.
Функция microtime() возвращает текущую метку времени Unix в микросекундах. Эта функция доступна только на операционных системах, у которых есть системный вызов gettimeofday().

Создаем переменную, которая будет засекать время начала проверки:
$start = microtime(true);

Параметром функции microtime передаем true для того, чтобы получить результат в вещественном виде float, представляющий собой текущее время в секундах, прошедших с начала эпохи Unix с точностью до микросекунд.
После этого размещаем тело тестируемого скрипта (для примера это функция usleep).
usleep(1000000); // Функция, которая откладывает время выполнения программы на 1000000 микросекунд

Теперь получаем время окончания работы скрипта:
$end = microtime(true);

Находим разницу между началом и концом работы скрипта:
$diff = $end - $start;

И отображаем результат:
echo 'Время выполнения скрипта: '.($diff).' сек.';

Мой скрипт выполнялся в течении:
Время выполнения скрипта: 1.0004560947418 сек.


Весь код данного примера:
$start = microtime(true);
usleep(1000000);
$end = microtime(true);
$diff = $end - $start;
echo 'Время выполнения скрипта: '.($diff).' сек.';


Какой вариант работает более точно не знаю, но предполагаю, что вариант с использованием функции microtime() должен быть более точным, так как в приведенном первом варианте, на создание экземпляра класса DateTime('now') должно затрачиваться больше времени.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.