Я хочу знать, сколько миллисекунд требуется для выполнения цикла 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 ?>