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;

Источник

Читайте также:  Name is local and global python

Время выполнения скрипта 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

vremya-vypolneniya-skripta-php

Доброго времени суток, коллеги! 🙂

Сегодня я решил затронуть такую тему, как время выполнения скрипта PHP и его определение.

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

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

Ну, и ещё иногда данные цифры требуют менеджеры и заказчики, желающие выяснить, сколько времени потребуется на то или иное действие в коде.

Поэтому я и решил написать данную коротенькую заметку, в которой решил изложить порядок действий в аналогичной ситуации.

Сперва мы рассмотрим сам алгоритм определения времени исполнения PHP скрипта, а затем я приведу код, с помощью которого он будет реализовываться.

Время выполнения PHP скрипта — алгоритм определения

Порядок наших действий будет предельно прост:

  1. определяем текущее серверное время в PHP коде перед выполнением действий, прописанных в скрипте;
  2. после того, как скрипт выполнится, снова узнаём серверное время;
  3. вычисляем средствами PHP разницу времени между завершением выполнения скрипта и его запуском.

Полученное в итоге значение как раз и будет временем выполнения PHP скрипта, которое можно будет принимать во внимание при дальнейшей оптимизации и прочих действиях.

Время работы PHP скрипта — реализация алгоритма

Для вывода текущего времени в PHP коде я решил воспользоваться стандартной PHP функцией microtime(), которая возвращает текущую метку времени в Unix формате с микросекундами.

Затем, чтобы уловить малейшие изменения времени выполнения скриптов, т.к. иногда доли секунды могут быть фатальны и привести к большим потерям при использовании медленного кода в больших масштабах.

http://cccp-blog.com/wp-includes/images/banners/templatemonster/banner_content_mobile.png

Ну, и плюс, учёт микросекунд при вычислениях влияет на точность калькуляций в положительную сторону.

Для демонстрации своих теоретических повествований я написал простенький скриптик, который вычисляет время прогона пустого цикла с 30 000 000 итераций (решил взять побольше для наглядности):

 echo 'Скрипт был выполнен за ' . (microtime(true) - $start) . ' секунд';

Как сказано в официальной документации PHP, по умолчанию microtime() возвращает строку в формате «msec sec», где sec — количество секунд с начала эпохи Unix (1 января 1970 0:00:00 GMT), а msec — это количество микросекунд, прошедших после sec.

Функция PHP microtime() имеет всего один параметр get_as_float, при указании которому значения true можно получить текущее время PHP в секундах, прошедших с начала эпохи Unix с точностью до микросекунд.

Поскольку мне нужно было именно текущее время, а не количество секунд с начала эпохи Unix, то я воспользовался данным параметром, что можно видеть в моём коде.

В итоге, с помощью функции echo(), на экран вывелось следующее сообщение: Скрипт был выполнен за 1.3156361579895 секунд.

Чтобы определить, что данная методика работает верно, я решил задать фиксированное время выполнения скрипта с помощью функции sleep(), которая делает задержку выполнения скрипта на указанное количество секунд.

В итоге, следующая конструкция вернула сообщение Скрипт был выполнен за 2.0000510215759 секунд:

Превышение указанной задержки на микроскопические доли секунд можно списать на время вызова кодовых конструкций и обработку результатов их выполнения серверным железом, поэтому на них вполне можно закрыть глаза.

Если они будут всё-таки раздражать вас или вашего заказчика, то можете воспользоваться хаком в виде банального округления до сотых или тысячных долей с помощью PHP функции round(), задействовав её следующим образом:

round(microtime(true) - $start, 2);

Результатом выполнения данного куска кода для вышеприведённого примера станет значение в кругленькие 2 секунды, что устроит самых искушённых перфекционистов 🙂

На этом сегодняшняя информация о том, как можно определить время выполнения скрипта PHP, подходит к концу.

Библиотека курсов

Пишите свои отзывы в комментариях и задавайте интересующие вас вопросы в пабликах проекта в социальных сетях.

Всем удачи и до новых встреч! 🙂

P.S.: если вам нужен сайт либо необходимо внести правки на существующий, но для этого нет времени и желания, могу предложить свои услуги.

Более 5 лет опыта профессиональной разработки сайтов. Работа с PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular и другими технологиями web-разработки.

Опыт разработки проектов различного уровня: лендинги, корпоративные сайты, Интернет-магазины, CRM, порталы. В том числе поддержка и разработка HighLoad проектов. Присылайте ваши заявки на email cccpblogcom@gmail.com.

И с друзьями не забудьте поделиться 😉

Источник

Оцените статью