使用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 相关文章推荐
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
php 短链接算法收集与分析
Dec 30 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
php实现encode64编码类实例
Mar 24 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
PHP实现操作redis的封装类完整实例
Nov 14 PHP
PHP性能优化大全(php.ini)
May 20 PHP
php外部执行命令函数用法小结
Oct 11 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
Jun 22 PHP
TP5框架实现签到功能的方法分析
Apr 05 PHP
php使用Swoole实现毫秒级定时任务的方法
Sep 04 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
基于mysql的bbs设计(五)
2006/10/09 PHP
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
php中socket的用法详解
2014/10/24 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
2012/08/14 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
python创建子类的方法分析
2019/11/28 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
介绍一下#error预处理
2015/09/25 面试题
天游软件面试
2013/11/23 面试题
献爱心倡议书
2014/04/14 职场文书
干部考核评语
2014/04/29 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
表扬稿格式范文
2015/01/16 职场文书
商务考察邀请函模板
2015/02/02 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
素质拓展训练感想
2015/08/07 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android