timer_float()
Отримує час (у секундах) минулий з початку виконання 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 ) ); }
#6 Виміряємо час виконання шматка коду на чистому 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 секунд */
також Час виконання шматка коду .
список змін
З версії 5.8.0 | Введено. |
Код timer_float() timer float WP 6.0.2
function timer_float() { return microtime( true ) - $_SERVER['REQUEST_TIME_FLOAT']; }