- Функции языка для измерения время выполнения скрипта PHP
- Зачем измерения в программировании
- Курс «PHP-разработчик с нуля»
- Курс «SQL и получение данных»
- Курс «веб-разработчик с нуля»
- Возможности PHP
- microtime
- Список параметров
- Возвращаемые значения
- Примеры
- Смотрите также
- User Contributed Notes
- Определяем время работы скрипта PHP
- Время выполнения PHP скрипта — алгоритм определения
- Время работы PHP скрипта — реализация алгоритма
Функции языка для измерения время выполнения скрипта PHP
От автора: сын моего знакомого настолько увлекся химией, что начал дома проводить различные «испытания». После того, как их «жертвой» стала люстра на кухне, отец попросил его изменить свои пристрастия. В результате ребенок увлекся статистикой, и решил вычислить среднее время горения одной спички. Следствием чего чуть не стало возгорание всей квартиры. Я посоветовал «горе-ученому» заняться программированием, и установить время выполнения скрипта PHP.
Зачем измерения в программировании
Прежде всего, это безопаснее, чем химия и статистика :). А на самом деле время выполнения программного кода является важным параметром, который влияет на работоспособность всего ресурса и отдельных его модулей. Этот параметр больше востребован при оптимизации и тестировании созданных веб-приложений.
Немного пофантазируем. Представим, что есть какой-то «самописный» движок, который разработчик «залил» на хороший хостинг и запустил (на его основе) свой сайт. Но почему-то загрузка ресурса на стороне пользователя происходит очень медленно.
В такой ситуации первоначально все шишки «посыплются» на хостера. Скорее всего, разгневанный программист обратится с жалобой в службу поддержки хостинга. Мол, не выполняются условия договора, сайт еле «живой»…
Но на самом деле проблема медленной загрузки страниц динамического ресурса может скрываться в самом движке. И чтобы не выглядеть потом «чайником», опытный разработчик всегда перед сдачей проекта измеряет время исполнения скрипта PHP.
Курс «PHP-разработчик с нуля»
— Научитесь создавать сайты и веб-приложения на языке PHP.
— Изучите актуальные фреймворки Laravel, Simfony и Yii2.
— 78 часов теории и 361 час практики.
— Вы создадите 5 масштабных проектов для портфолио.
— Помощь с поиском работы или стажировки.
Курс «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 ));
?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
Доброго времени суток, коллеги! 🙂
Сегодня я решил затронуть такую тему, как время выполнения скрипта PHP и его определение.
Не скажу, что данная необходимость возникает каждый день, но время от времени на практике возникают ситуации, когда нужно получить время работы скрипта PHP.
Особенно часто за таким занятием можно застукать разработчиков, занимающихся рефакторингом кода и оптимизацией существующих алгоритмов, когда время выполнения PHP скрипта является ключевым фактором при выборе конечного варианта.
Ну, и ещё иногда данные цифры требуют менеджеры и заказчики, желающие выяснить, сколько времени потребуется на то или иное действие в коде.
Поэтому я и решил написать данную коротенькую заметку, в которой решил изложить порядок действий в аналогичной ситуации.
Сперва мы рассмотрим сам алгоритм определения времени исполнения PHP скрипта, а затем я приведу код, с помощью которого он будет реализовываться.
Время выполнения PHP скрипта — алгоритм определения
Порядок наших действий будет предельно прост:
- определяем текущее серверное время в PHP коде перед выполнением действий, прописанных в скрипте;
- после того, как скрипт выполнится, снова узнаём серверное время;
- вычисляем средствами PHP разницу времени между завершением выполнения скрипта и его запуском.
Полученное в итоге значение как раз и будет временем выполнения PHP скрипта, которое можно будет принимать во внимание при дальнейшей оптимизации и прочих действиях.
Время работы PHP скрипта — реализация алгоритма
Для вывода текущего времени в PHP коде я решил воспользоваться стандартной PHP функцией microtime(), которая возвращает текущую метку времени в Unix формате с микросекундами.
Затем, чтобы уловить малейшие изменения времени выполнения скриптов, т.к. иногда доли секунды могут быть фатальны и привести к большим потерям при использовании медленного кода в больших масштабах.
Ну, и плюс, учёт микросекунд при вычислениях влияет на точность калькуляций в положительную сторону.
Для демонстрации своих теоретических повествований я написал простенький скриптик, который вычисляет время прогона пустого цикла с 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.
И с друзьями не забудьте поделиться 😉