- Время и память выполнения скрипта PHP
- Время выполнения скрипта
- Вариант 1
- Результат
- Вариант 2
- Вариант 3
- Среднее время
- Затраченная память
- Результат
- Конвертация результата в килобайты и мегабайты
- Результат
- Время и память скрипта
- Измерение скорости (времени) выполнения php скрипта
- Простой вариант
- Вариант посложнее
- Проверка скорости загрузки php скриптов
- Решение
- php. Узнать время выполнения скрипта
Время и память выполнения скрипта PHP
Несколько методов как узнать время генерации страницы и затраченный объем памяти PHP скрипта.
Время выполнения скрипта
Вариант 1
$start = microtime(true); . $time = microtime(true) - $start; echo $time . ' сек.';
Результат
Вариант 2
Вместо $start = microtime(true) брать значение из переменной $_SERVER[‘REQUEST_TIME_FLOAT’] , которая содержит время запроса к серверу.
. $time = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']; echo $time . ' сек.';
Вариант 3
Если на сервере установлен Xdebag.
. echo xdebug_time_index() . ' сек.';
Среднее время
Т.к. результат «скачет» и зависит от многих факторов (нагрузка на хостинг и т.д.), доработаем скрипт, добавив запись результата в лог и подсчет среднего арифметического значения.
$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 . ' сек.';
Затраченная память
Функция memory_get_usage() – возвращает количество памяти в байтах, которое было выделено PHP-скрипту на данный момент.
В Xdebug есть функция xdebug_memory_usage() , которая возвращает тот же результат.
$memory = memory_get_usage(); . echo (memory_get_usage() - $memory) . ' байт';
Результат
Конвертация результата в килобайты и мегабайты
$memory = memory_get_usage(); . $memory = memory_get_usage() - $memory; $i = 0; while (floor($memory / 1024) > 0) < $i++; $memory /= 1024; >$name = array('байт', 'КБ', 'МБ'); echo round($memory, 2) . ' ' . $name[$i];
Результат
Время и память скрипта
Объединим приведенные методы в один скрипт.
$start = microtime(true); $memory = memory_get_usage(); . $memory = memory_get_usage() - $memory; $time = microtime(true) - $start; // Подсчет среднего времени. $f = fopen('time.log', 'a'); fwrite($f, $time . PHP_EOL); fclose($f); $log = file('time.log'); $time = round(array_sum($log) / count($log), 3); // Перевод в КБ, МБ. $i = 0; while (floor($memory / 1024) > 0) < $i++; $memory /= 1024; >$name = array('байт', 'КБ', 'МБ'); $memory = round($memory, 2) . ' ' . $name[$i]; echo $time . ' сек. / ' . $memory;
Измерение скорости (времени) выполнения php скрипта
Иногда бывает нужно замерить время выполнения отельного куска кода в PHP. Сделать это не сложно, ниже разберемся как.
Простой вариант
Замерить скорость выполнения какой-то отдельной его части PHP кода, можно с помощью встроенной в PHP функции microtime( true ) . Функция вернет UNIX штамп времени в микросекундах. Параметр true говорит функции вернуть число, а не строку, чтобы можно было потом просто отнять одно число от другого. Логика проста: сначала замеряем текущее время в микросекундах, выполняем код, опять замеряем текущее время и высчитываем разницу времени — эта разница и будет временем выполнения кода. С помощью функции sprintf() форматируем результат в более читаемый формат.
$start = microtime( true ); get_bloginfo( 'homeurl' ); // какой-то код $diff = sprintf( '%.6f sec.', microtime( true ) - $start ); echo "Время выполнения: $diff"; // Время выполнения: 0.000014 sec.
Вариант посложнее
/** * Считает время выполнения PHP кода (в секундах). * * exec_time(); * // код * echo exec_time('get') .' сек.'; //> 0.03654 сек. * * @version 3.4.5 * * @param string $phase run - включает подсчет: первый раз или после паузы (по умолчанию). * start - очищает все кэши и включает подсчет - clear & run. * get - получает разницу, между предыдущим вызовом функции. * getall|end|stop - получает разницу, между первым вызовом функции (run). * pause - временная остановка подсчета. exec_time() для продолжения. * clear - полностью очищает результат. exec_time() для начала нового подсчета. * @param int $round До скольки знаков после запятой округлять результат. * * @return float|void Example 0.03654 */ function exec_time( $phase = 'run', $round = 6 ) < static $prev_time, $collect; if( 'start' === $phase )< $collect = $prev_time = 0; >elseif( 'clear' === $phase ) < return $collect = $prev_time = 0; >list( $usec, $sec ) = explode( ' ', microtime() ); $mctime = bcadd( $usec, $sec, 8 ); if( $prev_time ) < $exectime = $mctime - $prev_time; // bcsub( $mctime, $prev_time, 8 ); $collect += $exectime; // bcadd( $collect, $exectime, 8 ); >$prev_time = $mctime; if( 'pause' === $phase ) < $prev_time = 0; >elseif( 'get' === $phase ) < return round( $exectime, $round ); >elseif( false !== strpos( 'getall end stop', $phase ) ) < return round( $collect, $round ); >>
Если замеряете отдельные быстрые функции, например: __() , то можно повторять выполнение для наглядности. Например, замерим работу __() :
exec_time(); for( $i=1; $i echo exec_time('get') .'сек.'; // 0.51650 сек.
Проверка скорости загрузки php скриптов
Доброго времени суток! Народ как вывести на экран скорость загрузки страницы сайта либо php скрипта?
Заранее большое спасибо!
Ограничение скорости загрузки файла
Приветствую! Есть код, ограничивающий загрузку файла <?php $filename =.
Отображение скорости загрузки файла на сервера
Недавно создал файлобменик хочу к нему прикрутить показатель скорости загрузки и оставшееся время.
Нубский вопрос по скорости загрузки скрипта
Здраствуйте! У меня вопрос: я замеряю время работы скрипта, и оно у меня, предположим, 0,01.
создание php скриптов
Какое есть ПО для написания скриптов PHP? Нужно к экзамену подготовить. Насколько я понял, скрипты.
Сообщение было отмечено Inkvizzz как решение
Решение
$start = microtime(true); // Тут код, скорость которого нужно узнать echo 'Время генерации: ' . ( microtime(true) - $start ) . ' сек.';
Отладка PHP скриптов
Здраствуйте! Интересуют меня программы(для виндовс)для отладки php скриптов. В частности.
Проблема с запуском PHP скриптов
Привет всем, установил LAMP по данной инструкции на CentOS 6 .
исполнение скриптов по условию if в php
Нужно по условию if исполнить определённый скрипт по изменению блока, по результатам сёрфинга в.
Запуск скриптов php по расписанию и по событию
В общем наверное не в ту ветку форума пишу, но все таки возможно кто то сталкивался: Есть два.
php. Узнать время выполнения скрипта
Данный материал предоставлен сайтом PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Иногда требуется узнать время выполнения скрипта. И это можно сделать с помощью встроенных в язык PHP функций.
Можно приводить различные варианты. Зачем кому-то может потребоваться узнавать время за которое выполняется код.
Это может быть как личный интерес в тестировании на скорость выполнения чужих функций, библиотек, классов и тд.
Так и при разработке своих скриптов и замера скорости выполнения с целью дальнейшего улучшения.
Представим, что вы разработали какую-то функцию, которая выполняется в течении какого-то времени и вас не устраивает ее скорость работы.
И вы постепенно ее улучшаете. Но не совсем понятно приносят ли эти улучшения какую-то пользу в скорости выполнения или нет.
Для этого можно замерить скорость ее выполнения.
Вариант первый (Не совсем точный но подойдет как пример):
Можно воспользоваться встроенным в язык PHP классом DateTime для предоставлении даты и времен (он начал поддерживаться с PHP 5 по текущую версию PHP7).
Оговорю сразу, что в рамках данного примера для замера скорости будет использоваться функция usleep(), которая будет откладывать выполнение программы на указанное количество микросекунд. Вы можете выполнить проверку на своем коде, который необходимо проверить на скорость выполнения.
И так. Для начала отметим точку с которой необходимо начинать засекать время:
$startTime = new DateTime('now');
Создаем экземпляр класса DateTime с параметром ‘now’ для получения текущего времени.
После этого необходимо разместить тело тестируемого скрипта (для примера это функция usleep).
usleep(1000000); // Функция, которая откладывает время выполнения программы на 1000000 микросекунд
$interval = $startTime->diff($endTime);
echo $interval->format('%S секунд, %f микросекунд');
Для более подробного и полного результата можно выполнить полную распечатку результата в плоть до указания года.
$interval->format('%Y лет, %M месяцев, %D дней, %H часов, %I минут, %S секунд, %f микросекунд'');
$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().
Параметром функции microtime передаем true для того, чтобы получить результат в вещественном виде float, представляющий собой текущее время в секундах, прошедших с начала эпохи Unix с точностью до микросекунд.
После этого размещаем тело тестируемого скрипта (для примера это функция usleep).
usleep(1000000); // Функция, которая откладывает время выполнения программы на 1000000 микросекунд
echo 'Время выполнения скрипта: '.($diff).' сек.';
$start = microtime(true); usleep(1000000); $end = microtime(true); $diff = $end - $start; echo 'Время выполнения скрипта: '.($diff).' сек.';
Какой вариант работает более точно не знаю, но предполагаю, что вариант с использованием функции microtime() должен быть более точным, так как в приведенном первом варианте, на создание экземпляра класса DateTime(‘now’) должно затрачиваться больше времени.