Точный способ измерения времени выполнения php-скриптов

Я хочу знать, сколько миллисекунд требуется для выполнения цикла PHP for-loop.

Я знаю структуру общего алгоритма, но не знаю, как реализовать его в PHP:

Begin init1 = timer(); // where timer() is the amount of milliseconds from midnight the loop begin some code the loop end total = timer() - init1; End 

Для этого вы можете использовать функцию microtime . Из документации :

microtime – текущая временная отметка Unix с микросекундами


Если для get_as_float установлено значение TRUE , то microtime() возвращает float, который представляет текущее время в секундах с момента эпохи Unix с точностью до ближайшей микросекунды.

Пример использования:

 $start = microtime(true); while (...) { } $time_elapsed_secs = microtime(true) - $start; 

Вы можете использовать microtime(true) со следующими манерами:

Поместите это в начало вашего php-файла:

 //place this before any script you want to calculate time $time_start = microtime(true); 

// здесь идет код скрипта

 // do something 

Поместите это в конец вашего php-файла:

 // Display Script End time $time_end = microtime(true); //dividing with 60 will give the execution time in minutes other wise seconds $execution_time = ($time_end - $time_start)/60; //execution time of the script echo '<b>Total Execution Time:</b> '.$execution_time.' Mins'; 

Он выдает результат в minutes .

Начиная с PHP 5.4 вы можете использовать $_SERVER["REQUEST_TIME_FLOAT"] . Он содержит временную метку начала запроса с точностью до микросекунды.

 $time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"]; 

Источник: http://php.net/manual/en/function.microtime.php

Это позволяет измерить выполнение скрипта только с одной строкой кода, например, поместив его в конец скрипта.

Создать файл loadtime.php

 <?php class loadTime{ private $time_start = 0; private $time_end = 0; private $time = 0; public function __construct(){ $this->time_start= microtime(true); } public function __destruct(){ $this->time_end = microtime(true); $this->time = $this->time_end - $this->time_start; echo "Loaded in $this->time seconds\n"; } } 

Чем в начале вашего скрипта, после <?php писать include 'loadtime.php'; $loadtime=new loadTime(); include 'loadtime.php'; $loadtime=new loadTime();

Когда страница загружается в конце, будет написано «Загружено за x секунд»,

 $start = microtime(true); for ($i = 0; $i < 10000; ++$i) { // do something } $total = microtime(true) - $start; echo $total; 

См. Microtime () .

Вот функция, выполняющая время выполнения любой части кода PHP, так же, как и модуль timeit на Python: https://gist.github.com/flaviovs/35aab0e85852e548a60a

Как это использовать:

 include('timeit.php'); const SOME_CODE = ' strlen("foo bar"); '; $t = timeit(SOME_CODE); print "$t[0] loops; $t[2] per loop\n"; в include('timeit.php'); const SOME_CODE = ' strlen("foo bar"); '; $t = timeit(SOME_CODE); print "$t[0] loops; $t[2] per loop\n"; 

Результат:

 $ php x.php 100000 loops; 18.08us per loop 

Отказ от ответственности: я являюсь автором этого Gist

EDIT: timeit теперь является отдельным автономным проектом на https://github.com/flaviovs/timeit

У вас есть правильная идея, за исключением более точного выбора времени с функцией microtime () .

Если то, что находится внутри цикла, быстро, возможно, что кажущееся прошедшее время будет равным нулю. Если это так, оберните еще один цикл вокруг кода и вызовите его повторно. Не забудьте разделить разницу на количество итераций, чтобы получить одноразовое время. У меня есть профилированный код, который требует 10 000 000 итераций для получения последовательных и надежных результатов синхронизации.

Здесь очень простой и короткий метод

 <?php $time_start = microtime(true); //the loop begin //some code //the loop end $time_end = microtime(true); $total_time = $time_end - $time_start; echo $total_time; // or whatever u want to do with the time ?>