Проверить скорость выполнения скрипта php

Функции языка для измерения время выполнения скрипта PHP

От автора: сын моего знакомого настолько увлекся химией, что начал дома проводить различные «испытания». После того, как их «жертвой» стала люстра на кухне, отец попросил его изменить свои пристрастия. В результате ребенок увлекся статистикой, и решил вычислить среднее время горения одной спички. Следствием чего чуть не стало возгорание всей квартиры. Я посоветовал «горе-ученому» заняться программированием, и установить время выполнения скрипта PHP.

Зачем измерения в программировании

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

Немного пофантазируем. Представим, что есть какой-то «самописный» движок, который разработчик «залил» на хороший хостинг и запустил (на его основе) свой сайт. Но почему-то загрузка ресурса на стороне пользователя происходит очень медленно.

В такой ситуации первоначально все шишки «посыплются» на хостера. Скорее всего, разгневанный программист обратится с жалобой в службу поддержки хостинга. Мол, не выполняются условия договора, сайт еле «живой»…

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

Читайте также:  Login form in html and php

PHP-разработчик с нуля

Курс «PHP-разработчик с нуля»

— Научитесь создавать сайты и веб-приложения на языке PHP.

— Изучите актуальные фреймворки Laravel, Simfony и Yii2.

— 78 часов теории и 361 час практики.

— Вы создадите 5 масштабных проектов для портфолио.

— Помощь с поиском работы или стажировки.

SQL и получение данных

Курс «SQL и получение данных»

— Освоите один из основных инструментов работы с данными.

— 20 часов теории, 32 часа практики.

— Видеолекции, вебинары, практические задания и тренажёр.

— Выполните 6 домашних работ и итоговый проект.

— Помощь с поиском работы или стажировки.

Курс веб-разработчик с нуля

Курс «веб-разработчик с нуля»

— Научитесь программировать на JavaScript и PHP.

— Сможете создавать сайты и веб-приложения.

— Сможете уверенно работать и с фронтендом, и с бэкендом веб-сервисов.

— Выполните 9 масштабных проектов для портфолио

— Помощь с поиском работы или стажировки.

Возможности PHP

Я всегда называл PHP одним из самых удобных языков программирования. Чтобы отследить время работы кода, разработчику не требуется писать длинные «талмуды» для перехвата каждой строки скрипта. В данной технологии реализовано несколько специализированных средств. Главным из них является функция microtime(). Она возвращает время (в миллисекундах), прошедшее с начала 1970 г. Так называемое «начало эпохи Unix». Если передать функции параметр get_as_float со значением true, то она будет возвращать временной промежуток в виде целых секунд и дробных миллисекунд.

Принцип использования microtime() заключается в следующем: функцию вызывают в начале скрипта и в его конце. Затем из последнего значения вычитают начальное. Вот как посчитать время выполнения скрипт:

Источник

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 ));

// В суперглобальном массиве $_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 скрипта

    Иногда бывает нужно замерить время выполнения отельного куска кода в 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

    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.jpg

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

    Для демонстрации своих теоретических повествований я написал простенький скриптик, который вычисляет время прогона пустого цикла с 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.

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

    Источник

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