使用php-timeit估计php函数的执行时间
废话不多说了,直接把我写的timeit函数分享给大家,具体内容如下:
/**
*Computethedelaytoexecuteafunctionanumberoftime
*@param$countNumberoftimethatthetestswillexecutethegivenfunction
*@param$functionthefunctiontotest.Canbeastringwithparameters(ex:'myfunc(123,0,342)')oracallback
*@returnfloatDurationinseconds(asafloat)
*/
functiontimeit($count,$function){
if($count<=0){
echo"Error:counthavetobemorethanzero";
return-1;
}
$nbargs=func_num_args();
if($nbargs<2){
echo'Error:NoFunciton!';
echo'Usage:';
echo"\ttimeit(count,'function(param)')";
echo"\te.g:timeit(100,'function(0,2)')";
return-1;//nofunctiontotime
}
//Generatecallback
$func=func_get_arg(1);
$func_name=current(explode('(',$func));
if(!function_exists($func_name)){
echo'Error:UnknownFunction';
return-1;//can'ttestunknownfunction
}
$str_cmd='';
$str_cmd.='$start=microtime(true);';
$str_cmd.='for($i=0;$i<'.$count.';$i++)'.$func.';';
$str_cmd.='$end=microtime(true);';
$str_cmd.='return($end-$start);';
returneval($str_cmd);
}
测试一下自己写的一个求根算法与系统内置求根函数的执行时间,如下:
//取平方根
functionsqrt_nd($num){
$value=$num;
while(abs($value*$value-$num)>0.001){
$value=($value+$num/$value)/2;
}
return$value;
}
printtimeit(1000,'sqrt_nd(5)');
print"\n";
printtimeit(1000,'sqrt(5)');
测试结果如下:
0.028280019760132
0.0041000843048096
可见,内置求根函数比自定义的求根函数快了6倍多~~
php中检测函数执行时间的功能使用的方法
PHP中的microtime()函数可以实现
microtime()函数返回当前Unix时间戳和微秒数。
microtime(get_as_float)
参数说明
get_as_float如果给出了get_as_float参数并且其值等价于TRUE,该函数将返回一个浮点数。
本函数仅在支持gettimeofday()系统调用的操作系统下可用。
例如:
<?php
$start_time=microtime(true);
for($i=1;$i<=1000;$i++){
echo$i.'<br>';
}
$end_time=microtime(true);
echo'循环执行时间为:'.($end_time-$start_time).'s';
?>