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


Posted in PHP onSeptember 06, 2015

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

/**
 * Compute the delay to execute a function a number of time
 * @param $count Number of time that the tests will execute the given function
 * @param $function  the function to test. Can be a string with parameters (ex: 'myfunc(123, 0, 342)') or a callback
 * @return float   Duration in seconds (as a float)
 */
function timeit($count, $function) {
 if ($count <= 0){
  echo "Error: count have to be more than zero";
  return -1;
 }
 $nbargs = func_num_args();
 if ($nbargs < 2) {
  echo 'Error: No Funciton!';
  echo 'Usage:';
  echo "\ttimeit(count, 'function(param)')";
  echo "\te.g:timeit(100, 'function(0,2)')";
  return -1;      // no function to time
 }
 // Generate callback
 $func = func_get_arg(1);
 $func_name = current(explode('(', $func));
 if (!function_exists($func_name)) {
  echo 'Error: Unknown Function';
  return -1;     // can't test unknown function
 }
 $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);';
 return eval($str_cmd);
}

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

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

例如:

<?php
$start_time = microtime(true);
for($i=1;$i<=1000;$i++){
echo $i.'<br>';
}
$end_time = microtime(true);

echo '循环执行时间为:'.($end_time-$start_time).' s';
?>

PHP 相关文章推荐
自动分页的不完整解决方案
Jan 12 PHP
PHP中集成PayPal标准支付的实现方法分享
Feb 06 PHP
PHP5中GD库生成图形验证码(有汉字)
Jul 28 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
php微信支付接口开发程序
Aug 02 PHP
使用Yii2实现主从数据库设置
Nov 20 PHP
CI框架表单验证实例详解
Nov 21 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
关于Yii中模型场景的一些简单介绍
Sep 22 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
Oct 21 PHP
PHP开发API接口签名生成及验证操作示例
May 27 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 #PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 #PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 #PHP
PHP中error_reporting()用法详解
Aug 31 #PHP
大家在抢红包,程序员在研究红包算法
Aug 31 #PHP
微信公众平台开发之天气预报功能
Aug 31 #PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
Aug 28 #PHP
You might like
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
jQuery实现图片加载完成后改变图片大小的方法
2016/03/29 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python使用any判断一个对象是否为空的方法
2014/11/19 Python
python自然语言编码转换模块codecs介绍
2015/04/08 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
高中考试作弊检讨书
2014/01/14 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
解除处分决定书
2015/06/25 职场文书
幼儿园国培研修日志
2015/11/13 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript