Время выполнения скрипта PHP и потребляемая память
Несколько способов узнать время выполнения скрипта PHP и затраченный объем памяти при выполнении этого скрипта.
Время выполнения скрипта
Способ #1
Функция microtime()
с переданным значением true
возвращает число секунд, прошедших с полуночи 01.01.1970
, причём это значение подсчитано до сотых долей секунды. Затем идёт сам скрипт (исполняемый код), который мы и проверяем. В последней строкой будет разница между текущим временем (после выполнения скрипта) и тем, что мы зафиксировали при старте скрипта. Разница времени после выполнения скрипта и времени до начала его работы, и есть время выполнения скрипта.
$start = microtime(true); // исполняемый код ... echo '<br>==============================================================='; echo 'Время выполнения скрипта: ' . (microtime(true) - $start) . ' sec.';
Результат:
Время выполнения скрипта: 0.16499996185303 sec.
Способ #2
Можно вместо $start = microtime(true)
брать значение из переменной $_SERVER['REQUEST_TIME_FLOAT']
, которая содержит время запроса к серверу. Вычисление времени выполнения происходит за исполняемым кодом.
// исполняемый код ... $time = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']; echo $time . ' sec.';
Способ #3
Если на сервере установлен Xdebag
:
// исполняемый код ... echo xdebug_time_index() . ' sec.';
Способ #4
Можно подсчитать среднее значение выполнения скрипта и записать результат в логи:
$start = microtime(true); // исполняемый код ... $time = round(microtime(true) - $start, 3); $f = fopen('time.log', 'a'); fwrite($f, $time . PHP_EOL); fclose($f); $log = file('time.log'); $result = round(array_sum($log) / count($log), 3); echo $result . ' sec.';
Класс для получения времени выполнения скрипта
Очень простой класс, который можно использовать для получения времени выполнения скрипта PHP. Имеет приватное статическое свойство $start
, в которой будет храниться время начала выполнения скрипта и имеющее значение по умолчанию $start = .0
. Метод start()
присваивает значение, которое вернула функция microtime
свойству $start
. Метод finish()
возвращает разницу между текущим временем (после выполнения скрипта) и тем, что мы зафиксировали при старте скрипта (присвоили значение в $start
).
<?php /** * Класс для измерения времени выполнения скрипта PHP */ class Timer { /** * @var float время начала выполнения скрипта */ private static $start = .0; /** * Начало выполнения */ public static function start() { self::$start = microtime(true); } /** * Разница между текущей меткой времени и меткой self::$start * @return float */ public static function finish() { return microtime(true) - self::$start; } }
Так используем класс:
Timer::start(); // исполняемый код ... echo 'Время выполнения скрипта: ' . Timer::finish() . ' sec.'; // =================================== // Пример использования класса Timer(). Заполним массив миллионом случайных чисел. Timer::start(); for ($i = 0; $i < 1000000; $i++) { $array[] = rand(0, 1000000); } echo 'Время выполнения скрипта: ' . Timer::finish() . ' sec.';
Объем использованной памяти
Функция memory_get_usage()
возвращает количество памяти в байтах, которое было выделено PHP скрипту на данный момент.
Принцип очень похож на измерение времени выполнения скрипта, о котором речь шла выше. Здесь тоже есть, как бы, стартовое состояние и и разница между текущим состоянием и стартовым.
$memory = memory_get_usage(); // исполняемый код ... echo 'Скушано памяти: ' . (memory_get_usage() - $memory) . ' байт';
В Xdebug
есть функция xdebug_memory_usage()
, которая возвращает тот же результат.
// исполняемый код ... echo 'Скушано памяти: ' . xdebug_memory_usage() . ' байт';
Результат:
Скушано памяти: 36018960 байт
Конвертация результата в килобайты и мегабайты
$memory = memory_get_usage(); for ($i = 0; $i < 1000000; $i++) { $array[] = rand(0, 1000000); } $memory = memory_get_usage() - $memory; // Конвертация результата в килобайты и мегабайты $i = 0; while (floor($memory / 1024) > 0) { $i++; $memory /= 1024; } $name = array('байт', 'КБ', 'МБ'); echo 'Скушано памяти: ' . round($memory, 2) . ' ' . $name[$i];
Результат:
Скушано памяти: 34 МБ
Время выполнения скрипта и объём потреблённой памяти
Timer::start(); $memory = memory_get_usage(); // начало исполняемого кода for ($i = 0; $i < 1000000; $i++) { $array[] = rand(0, 1000000); } // конец исполняемого кода $memory = memory_get_usage() - $memory; $name = array('байт', 'КБ', 'МБ'); $i = 0; while (floor($memory / 1024) > 0) { $i++; $memory /= 1024; } echo 'Время выполнения скрипта: ' . Timer::finish() . ' sec.<br>'; echo 'Скушано памяти: ' . round($memory, 2) . ' ' . $name[$i];
Результат:
Время выполнения скрипта: 0.79099988937378 sec. Скушано памяти: 34 МБ
Время выполнения скрипта и объём потреблённой памяти в Yii2
Вывести время выполнения скрипта и объём потреблённой памяти в Yii2:
echo '<!-- ' . sprintf('%0.3f', Yii::getLogger()->getElapsedTime()) , 'с. ' . round(memory_get_peak_usage()/(1024*1024), 2) . 'МБ -->';