- microtime
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- User Contributed Notes
- Время выполнения скрипта (PHP)
- Вычисляем время выполнения
- Результат
- Клаcc Timer
- Пример
- Категории
- Читайте также
- Комментарии
- Вход на сайт
- Социальные сети
- Время выполнения скрипта php и php-функций
- Время выполнения скрипта php
- Время выполнения php-функций
- Время выполнения array_key_exists() + switch() + if else()
- Время выполнения str_ireplace() + preg_replace()
- Заключение
- Время выполнения скрипта PHP и потребляемая память
- Время выполнения скрипта
- Способ #1
- Способ #2
- Способ #3
- Способ #4
- Класс для получения времени выполнения скрипта
- Объем использованной памяти
- Конвертация результата в килобайты и мегабайты
- Время выполнения скрипта и объём потреблённой памяти
- Время выполнения скрипта и объём потреблённой памяти в Yii2
microtime
Функция microtime() возвращает текущую метку времени Unix с микросекундами. Эта функция доступна только на операционных системах, в которых есть системный вызов gettimeofday().
Для измерения производительности рекомендуется использовать hrtime() .
Список параметров
Если указано и установлено в true , microtime() возвратит число с плавающей точкой ( float ) вместо строки ( string ), как описано в разделе возвращаемых значений ниже.
Возвращаемые значения
По умолчанию microtime() возвращает строку ( string ) в формате «msec sec», где sec представляет собой количество секунд в виде десятичной дроби с начала эпохи Unix (1 января 1970 0:00:00 GMT), а msec — это количество микросекунд, прошедших после sec .
Если параметр as_float установлен в true , то microtime() возвратит результат в вещественном виде ( float ), представляющий собой текущее время в секундах, прошедших с начала эпохи Unix с точностью до микросекунд.
Примеры
Пример #1 Замер времени выполнения скрипта
// Спим некоторое время
usleep ( 100 );
$time_end = microtime ( true );
$time = $time_end — $time_start ;
echo «Ничего не делал $time секунд\n» ;
?>
Пример #2 Пример использования microtime() и REQUEST_TIME_FLOAT
// Выбираем время сна случайным образом
usleep ( mt_rand ( 100 , 10000 ));
?php
// В суперглобальном массиве $_SERVER доступно значение REQUEST_TIME_FLOAT.
// Оно содержит временную метку начала запроса с точностью до микросекунд.
$time = microtime ( true ) — $_SERVER [ «REQUEST_TIME_FLOAT» ];
echo «Ничего не делал $time секунд\n» ;
?>
Смотрите также
- time() — Возвращает текущую метку системного времени Unix
- hrtime() — Получить системное время высокого разрешения
User Contributed Notes
- Функции даты и времени
- checkdate
- date_add
- date_create_from_format
- date_create_immutable_from_format
- date_create_immutable
- date_create
- date_date_set
- date_default_timezone_get
- date_default_timezone_set
- date_diff
- date_format
- date_get_last_errors
- date_interval_create_from_date_string
- date_interval_format
- date_isodate_set
- date_modify
- date_offset_get
- date_parse_from_format
- date_parse
- date_sub
- date_sun_info
- date_sunrise
- date_sunset
- date_time_set
- date_timestamp_get
- date_timestamp_set
- date_timezone_get
- date_timezone_set
- date
- getdate
- gettimeofday
- gmdate
- gmmktime
- gmstrftime
- idate
- localtime
- microtime
- mktime
- strftime
- strptime
- strtotime
- time
- timezone_abbreviations_list
- timezone_identifiers_list
- timezone_location_get
- timezone_name_from_abbr
- timezone_name_get
- timezone_offset_get
- timezone_open
- timezone_transitions_get
- timezone_version_get
Время выполнения скрипта (PHP)
Чтобы вычислить время выполнения необходимо воспользоваться функцией mixed microtime([bool $get_as_float = false]) , которая возвращает текущую метку времени Юникс с микросекундами.
Функция возвращает строку в формате «микросекунды секунды» , например 0.29687500 1384974205 , где 0.29687500 — микросекунды, 1384974205 — количество секунд с начало Эпохи Юникс.
Если передан параметр $get_as_float = true , то функция вернет float — текущее время в секундах прошедших с начала Эпохи Юникс, с учетом микросекунд.
Вычисляем время выполнения
Например стоит задача заполнить массив миллионом случайных чисел и вычислить время выполнения.
Результат
На экране будет примерно следующее значение:
Массив заполнялся примерно 0,77 сек.
Клаcc Timer
Очень удобно объявить один раз класс Timer , с методами Timer::start() и Timer::finish() .
Пример
Задача та же — заполнить массив миллионом случайных чисел.
На экране будет примерно следующее:
Массив заполнялся примерно 0,806 сек.
Категории
Читайте также
- Дата вчера сегодня завтра (PHP)
- Посчитать сколько времени прошло (PHP)
- Количество секунд от начала дня (PHP)
- Разница дат (PHP)
- Преобразовать дату в секунды (PHP)
- Количество секунд между датами (PHP)
- Количество минут между датами (PHP)
- Количество дней между датами (PHP)
- Количество часов между датами (PHP)
- Как получить TIMESTAMP дня текущей недели (PHP)
- Установить часовой пояс (PHP)
- Название предыдущего месяца (PHP)
Комментарии
Вход на сайт
Введите данные указанные при регистрации:
Социальные сети
Вы можете быстро войти через социальные сети:
Время выполнения скрипта php и php-функций
Сегодня узнаем, как измерять время выполнения скрипта php и отдельных php-функций.
Время выполнения скрипта php
Узнать время выполнения скрипта php очень просто, сначала засекаем время начала работы скрипта в переменной $start , функция getMicrotime() просто возвращает для удобства метку времени, а в конце работы скрипта считаем разницу вычитанием getMicrotime()-$start
function getMicrotime() return microtime(true);
>
$start = getMicrotime();//Здесь выполняется какой-то код приложения
.printf(‘Время работы скрипта %.4F сек.’, getMicrotime()-$start);
Здесь все, ну а дальше я не буду останавливаться подробно на каждой php-функции, просто для наглядности буду добавлять периодически замеры отдельных php-функций и конструкций для сравнения их времени выполнения, не просто отдельно каждую, а когда есть возможность решать задачу несколькими способами и разными функциями или конструкциями.
Время выполнения php-функций
Время выполнения array_key_exists() + switch() + if else()
header(«Content-Type: text/html; charset=utf-8»);
setlocale(LC_ALL, array(«ru_RU.CP1251», «ru_SU.CP1251», «ru_RU», «russian», «ru_SU», «ru»));function getMicrotime() return microtime(true);
>$start = getMicrotime();
for ($i=0; $i foreach($arData as $key => $arField)
if(array_key_exists(‘id’,$arField))
$result = true;
elseif(array_key_exists(‘available’,$arField))
$result = true;
elseif(array_key_exists(‘url’,$arField))
$result = true;
elseif(array_key_exists(‘price’,$arField))
$result = true;
elseif(array_key_exists(‘oldprice’,$arField))
$result = true;
>
>
printf(‘array_key_exists = %.4F сек.
‘, getMicrotime()-$start);$start = getMicrotime();
for ($i=0; $i foreach($arData as $key => $arField)
switch($key)
case ‘id’:
$result = true;
break;
case ‘available’:
$result = true;
break;
case ‘url’:
$result = true;
break;
case ‘price’:
$result = true;
break;
case ‘oldprice’:
$result = true;
break;
>
>
>
printf(‘switch = %.4F сек.
‘, getMicrotime()-$start);$start = getMicrotime();
for ($i=0; $i foreach($arData as $key => $arField)
if($key == ‘id’)
$result = true;if($key == ‘available’)
$result = true;if($key == ‘price’)
$result = true;if($key == ‘oldprice’)
$result = true;
>
>
printf(‘if else (1) = %.4F сек.
‘, getMicrotime()-$start);$start = getMicrotime();
for ($i=0; $i foreach($arData as $key => $arField)
if($key == ‘id’)
$result = true;
elseif($key == ‘available’)
$result = true;
elseif($key == ‘url’)
$result = true;
elseif($key == ‘price’)
$result = true;
elseif($key == ‘oldprice’)
$result = true;
>
>
printf(‘if else (2) = %.4F сек.
‘, getMicrotime()-$start);
?>Результат
Очень полезно знать, часто встречающиеся ситуации, условие if else(2) самое быстрое.
Время выполнения str_ireplace() + preg_replace()
header(«Content-Type: text/html; charset=utf-8»);
setlocale(LC_ALL, array(«ru_RU.CP1251», «ru_SU.CP1251», «ru_RU», «russian», «ru_SU», «ru»));$text=’ZTE мобильные Телефоны ZTE Blade GF3 (2 Sim-карты,4.5″, 854×480,2 Камеры: 8,8 ГБ,GPS,Wi-Fi, Bluetooth,Android 5.0,черный телефон)’;
function getMicrotime() return microtime(true);
>$start = getMicrotime();
for ($i=0; $i $text1 = str_ireplace(array(‘z’,’Тел’,’8′), array(‘*’), $text);
>
printf(‘str_ireplace(1) = %.4F сек.
‘, getMicrotime()-$start);$start = getMicrotime();
for ($i=0; $i $text1 = str_ireplace(‘z’, ‘*’, $text);
$text1 = str_ireplace(‘Тел’, ‘*’, $text);
$text1 = str_ireplace(‘8’, ‘*’, $text);
>
printf(‘str_ireplace(3) = %.4F сек.
‘, getMicrotime()-$start);$start = getMicrotime();
for ($i=0; $i $text1 = preg_replace(‘#z|Тел|8#i’, ‘*’, $text);
>
printf(‘preg_replace = %.4F сек.
‘, getMicrotime()-$start);
?>Результат
Часто читали на форумах, что preg_replace() очень медленный?)
А ведь, в каких-то ситуациях он и правда медленней str_ireplace() , а в каких-то наоборот, в разы быстрей, проверьте, убедитесь.Заключение
Как видим, все надо проверять на деле, иначе приложение по нашей глупости или банальной лени может оказаться таким медленным, съедать у сервера всю память и нагружать процессор до красного каления.
Время выполнения скрипта PHP и потребляемая память
Несколько способов узнать время выполнения скрипта PHP и затраченный объем памяти при выполнении этого скрипта.
Время выполнения скрипта
Способ #1
Функция microtime() с переданным значением true возвращает число секунд, прошедших с полуночи 01.01.1970 , причём это значение подсчитано до сотых долей секунды. Затем идёт сам скрипт (исполняемый код), который мы и проверяем. В последней строкой будет разница между текущим временем (после выполнения скрипта) и тем, что мы зафиксировали при старте скрипта. Разница времени после выполнения скрипта и времени до начала его работы, и есть время выполнения скрипта.
$start = microtime(true); // исполняемый код . echo '
==============================================================='; 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 ).
/** * Разница между текущей меткой времени и меткой 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];
Время выполнения скрипта и объём потреблённой памяти
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.
'; echo 'Скушано памяти: ' . round($memory, 2) . ' ' . $name[$i];Время выполнения скрипта: 0.79099988937378 sec. Скушано памяти: 34 МБ
Время выполнения скрипта и объём потреблённой памяти в Yii2
Вывести время выполнения скрипта и объём потреблённой памяти в Yii2:
echo 'getElapsedTime()) , 'с. ' . round(memory_get_peak_usage()/(1024*1024), 2) . 'МБ -->';