使用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 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
浅谈json_encode用法
Mar 05 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
YII Framework框架教程之日志用法详解
Mar 14 PHP
thinkphp自带验证码全面解析
Sep 18 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 PHP
php四种定界符详解
Feb 16 PHP
CodeIgniter框架基本增删改查操作示例
Mar 23 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
Jul 10 PHP
PHP实现权限管理功能示例
Sep 22 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 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
在普通HTTP上安全地传输密码
2007/07/21 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
Javascript变量函数浅析
2011/09/02 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
深入解析Python中的urllib2模块
2015/11/13 Python
jupyter安装小结
2016/03/13 Python
python制作websocket服务器实例分享
2016/11/20 Python
python3+PyQt5实现柱状图
2018/04/24 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
元旦晚会邀请函
2014/02/01 职场文书
读书小明星事迹材料
2014/05/03 职场文书
爱国口号
2014/06/19 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
质量承诺书格式范文
2015/04/28 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python