使用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安装攻略:常见问题解答(二)
Oct 09 PHP
使用TinyButStrong模板引擎来做WEB开发
Mar 16 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
解析php中curl_multi的应用
Jul 17 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 PHP
php多线程实现方法及用法实例详解
Oct 26 PHP
PHP 的比较运算与逻辑运算详解
May 12 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 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生成随机数的三种方法
2014/09/10 PHP
php密码生成类实例
2014/09/24 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
Python文件处理
2016/02/29 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
美国在线印刷公司:PsPrint
2017/10/12 全球购物
总裁助理岗位职责
2014/02/17 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
校外活动方案
2014/08/28 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
《司马光》教学反思
2016/02/22 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
mysql的Buffer Pool存储及原理
2022/04/02 MySQL