timer_float() WP 5.8.0

Отримує час (у секундах) минулий з початку виконання 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();

Приклади

0

#1 Кілька дзвінків

Подивимося як працює функція, якщо її викликати кілька разів:

var_dump(timer_float()); // float(0.069790124893188)

sleep(1);

var_dump(timer_float()); // float(1.0698711872101)
0

#2 Відформатуємо значення

Приклад форматування результату функції в нормальний людський вигляд.

$timer = timer_float();

printf( 'Пройшло %.4F сек.', $timer); //> Пройшло 0.1347 сек.
0

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

0

#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 (гола установка без плагінів).

0

#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 )
	);
}
0

#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() WP 6.0.2

function timer_float() {
	return microtime( true ) - $_SERVER['REQUEST_TIME_FLOAT'];
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *