Получает время (в секундах) прошедшее с момента начала выполнения PHP-скрипта.
Функция использует $_SERVER['REQUEST_TIME_FLOAT']
, которая появилась в PHP 5.4.0
Эта функция отличается от timer_stop() тем, что она возвращает разницу от начала работы самого PHP, а не от начала работы ядра WordPress.
$_SERVER['REQUEST_TIME_FLOAT']
устанавливается в момент, когда веб-сервер передает обработку PHP. Т.е. это временная метка, с которой PHP начинает обработку кода. Она отлично подойдет, когда нужно измерить, сколько времени потребовалось PHP (а не WordPress), чтобы добраться до определенного момента в коде.
$_SERVER['REQUEST_TIME']
— точно такая же переменная , только она содержит целое число (без микросекунд) - тоже самое что time()
:
var_dump( microtime() ); // string(21) "0.08756700 1644045238" var_dump( microtime( true ) ); // float(1644045238.0876) var_dump( time() ); // int(1644045238) var_dump( $_SERVER['REQUEST_TIME'] ); // int(1644045238) var_dump( $_SERVER['REQUEST_TIME_FLOAT'] ); // float(1644045238.0359) // Появились в версиях $_SERVER['REQUEST_TIME']; // PHP 5.1.0 $_SERVER['REQUEST_TIME_FLOAT']; // PHP 5.4.0
Для замеров скорости конкретного фрагмента кода по-прежнему лучше использовать microtime( true )
- cм. Измерение скорости выполнения php скрипта.
Возвращает
float
. Количество секунд с момента запуска PHP-скрипта, например 0.09620189666748.
Использование
timer_float();
Примеры
#1 Несколько вызовов
Посмотрим как работает функция если её вызвать несколько раз:
var_dump( timer_float() ); // float(0.069790124893188) sleep( 1 ); var_dump( timer_float() ); // float(1.0698711872101)
#2 Отформатируем значение
Пример того как форматировать результат функции в нормальный человеческий вид.
$timer = timer_float(); printf( 'Прошло %.4F сек.', $timer ); //> Прошло 0.1347 сек.
#3 Получим время от начала работы PHP до начала работы WordPress
Эта функция дает нам время с момента работы PHP, а timer_stop() с момента работы ядра WP, а значит мы можем высчитать их разницу и понять сколько проходит времени до начала работы самого WP.
if( isset( $_GET['check_time'] ) ){ add_filter( 'init', 'my_check_time', PHP_INT_MAX ); } function my_check_time(){ $timer_float = timer_float(); $timer_stop = timer_stop( 0, 15 ); var_dump( $timer_float ); // float(0.036677122116089) var_dump( $timer_stop ); // string(17) "0.034716844558716" var_dump( $timer_float - (float) $timer_stop ); // float(0.0019602775573729) exit; }
Как видим, от начала работы PHP до начала работы WP, проходит 0.00196 секунды. Я думал будет гораздо быстрее
Этот код я запускал на локальной машине WordPress 5.9.
#4 Получим время от начала работы PHP до загрузки ядра WP
На хуке wp_loaded можно сказать что все ядро WP загружено, но еще не сделаны никакие запросы в БД на обработку текущего URL запроса.
if( isset( $_GET['check_time'] ) ){ add_filter( 'wp_loaded', 'my_check_time', PHP_INT_MAX ); } function my_check_time(){ var_dump( timer_float() ); // float(0.035823106765747) exit; }
Как видим на загрузку ядра WP с момента работы PHP ушло 0.0358 секунды.
Этот код я запускал на локалке WordPress 5.9 (голая установка без плагинов).
#5 Выведем время генерации страницы, количество запросов и сколько было израсходовано памяти
Выведем все это в подвале сайта (во фронте) и в подвале админки:
/** * Выводит данные о количестве запросов запросов к БД, * время выполнения скрипта и размер затраченной памяти. */ add_filter( 'wp_footer', 'wp_usage' ); // на сайте add_filter( 'admin_footer_text', 'wp_usage' ); // в админке function wp_usage(){ echo sprintf( 'SQL: %d за %.3F sec. %s MB', get_num_queries(), timer_float(), round( memory_get_peak_usage()/1024/1024, 2 ) ); }
#5 Измерим время выполнения куска кода на чистом PHP
Для такой операции, нам не нужны никакие вспомогательные функции WP. Тут достаточно родной PHP функции microtime().
Измерим сколько времени отрабатывает функция получения записей get_posts():
$time_start = microtime( true ); // код, время выполнения которого замеряем get_posts(); $diff = microtime( true ) - $time_start; echo "get_posts() работала $diff секунд"; /* получим: get_posts() работала 0.0030319690704346 секунд */
Список изменений
function timer_float() { return microtime( true ) - $_SERVER['REQUEST_TIME_FLOAT']; }