当前位置:首页 > PHP教程 > php日期 > 列表

使用php-timeit估计php函数的执行时间

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-17 10:08:16 浏览: 评论:0 

当我们在使用php性能优化的时候,需要知道某个函数的执行时间,在python中,我们有timeit模块给我们实现,在php有没有类似的模块?接下来,小编给大家分享我写的一个简单timeit函数,需要的朋友可以参考下。

废话不多说了,直接把我写的timeit函数分享给大家,具体内容如下:

  1. /** 
  2.  * Compute the delay to execute a function a number of time 
  3.  * @param $count Number of time that the tests will execute the given function 
  4.  * @param $function  the function to test. Can be a string with parameters (ex: 'myfunc(123, 0, 342)') or a callback 
  5.  * @return float   Duration in seconds (as a float) 
  6.  */ 
  7. function timeit($count$function) { 
  8.  if ($count <= 0){ 
  9.   echo "Error: count have to be more than zero"
  10.   return -1; 
  11.  } 
  12.  $nbargs = func_num_args(); 
  13.  if ($nbargs < 2) { 
  14.   echo 'Error: No Funciton!'
  15.   echo 'Usage:'
  16.   echo "\ttimeit(count, 'function(param)')"
  17.   echo "\te.g:timeit(100, 'function(0,2)')"
  18.   return -1;      // no function to time 
  19.  } 
  20.  // Generate callback 
  21.  $func = func_get_arg(1); 
  22.  $func_name = current(explode('('$func)); 
  23.  if (!function_exists($func_name)) { 
  24.   echo 'Error: Unknown Function'
  25.   return -1;     // can't test unknown function 
  26.  } 
  27.  $str_cmd = ''
  28.  $str_cmd .= '$start = microtime(true);'
  29.  $str_cmd .= 'for($i=0; $i<'.$count.'; $i++) '.$func.';'
  30.  $str_cmd .= '$end = microtime(true);'
  31.  $str_cmd .= 'return ($end - $start);'
  32.  return eval($str_cmd); 

测试一下自己写的一个求根算法与系统内置求根函数的执行时间,如下:

  1. //取平方根 
  2. function sqrt_nd($num){ 
  3.  $value = $num
  4.  while(abs($value*$value -$num) > 0.001){ 
  5.   $value = ($value + $num/$value)/2; 
  6.  } 
  7.  return $value
  8. print timeit(1000, 'sqrt_nd(5)'); 
  9. print "\n"
  10. print timeit(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() 系统调用的操作系统下可用。

例如:

  1. $start_time = microtime(true); 
  2. for($i=1;$i<=1000;$i++){ 
  3. echo $i.'<br>'
  4. $end_time = microtime(true); 
  5. echo '循环执行时间为:'.($end_time-$start_time).' s';

Tags: php-timeit php函数执行时间

分享到: