准确的方法来衡量PHP脚本的执行时间
我想知道PHP for-loop执行多less毫秒。
我知道一个通用algorithm的结构,但不知道如何在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
function。 从文档 :
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
这允许您只用一行代码来测量脚本执行,例如将其放在脚本的末尾。
创build文件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代码的函数,就像Python的timeit模块一样: 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";
结果:
$ php x.php 100000 loops; 18.08us per loop
免责声明:我是这个主要的作者
编辑: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 ?>