使用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 相关文章推荐
PHP与javascript对多项选择的处理
Oct 09 PHP
文章推荐系统(二)
Oct 09 PHP
snoopy PHP版的网络客户端提供本地下载
Apr 15 PHP
php tp验证表单与自动填充函数代码
Feb 22 PHP
探讨GDFONTPATH能否被winxp下的php支持
Jun 21 PHP
php模拟登陆的实现方法分析
Jan 09 PHP
php中实现可以返回多个值的函数实例
Mar 21 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
Yii2中DropDownList简单用法示例
Jul 18 PHP
利用PHP命令行模式采集股票趋势信息
Aug 09 PHP
PHP实现的最大正向匹配算法示例
Dec 19 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解析非标准json、非规范json的方式实例
2020/12/10 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
js日历功能对象
2012/01/12 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
关于JS字符串函数String.replace()
2013/04/07 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
flask入门之表单的实现
2018/07/18 Python
anaconda如何查看并管理python环境
2019/07/05 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
党员干部承诺书范文
2014/03/25 职场文书
老师对学生的寄语
2014/04/09 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
Ajax实现三级联动效果
2021/10/05 Javascript
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL