Не городи microtime(true) в начале index.php, когда PHP сделал это за тебя:
// ❌ Часто вижу
define('APP_START', microtime(true));
// ... где-то в конце
$elapsed = microtime(true) - APP_START;
// ✅ Уже есть
$elapsed = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
Разница принципиальная. APP_START фиксирует момент после автозагрузки, DI-контейнера и прочего bootstrap'а. REQUEST_TIME_FLOAT — реальный старт запроса на уровне PHP-FPM.
// Логируй реальное время ответа в footer или middleware
header('X-Response-Time: ' . round(
(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']) * 1000, 2
) . 'ms');
⚠️ Ловушки
— В CLI REQUEST_TIME_FLOAT есть, но равен моменту запуска скрипта.
— Не путай с REQUEST_TIME (int, секунды) — для замеров он бесполезен.
Библиотека пхпшника
#vardump