使用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 相关文章推荐
给多个地址发邮件的类
Oct 09 PHP
用PHPdig打造属于你自己的Google[图文教程]
Feb 14 PHP
php array_intersect比array_diff快(附详细的使用说明)
Jul 03 PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 PHP
一个简单且很好用的php分页类
Oct 26 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
Oct 26 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
PHP闭包函数详解
Feb 13 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
Yii2中datetime类的使用
Dec 17 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 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
漂亮但不安全的CTB
2006/10/09 PHP
支持oicq头像的留言簿(二)
2006/10/09 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
php 学习资料零碎东西
2010/12/04 PHP
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
JS 动态加载脚本的4种方法
2009/05/05 Javascript
JavaScript EasyPager 分页函数
2011/05/25 Javascript
使用javascipt---实现二分查找法
2013/04/10 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python实现Linux下守护进程的编写方法
2014/08/22 Python
Python yield与实现方法代码分析
2018/02/06 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
python构造IP报文实例
2020/05/05 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
蒂娜商店:Tiina the Store
2019/12/07 全球购物
结构工程个人自荐信范文
2013/11/30 职场文书
学前班教师的自我鉴定
2013/12/05 职场文书
工作失职检讨书范文
2014/01/16 职场文书
高中运动会入场词
2014/02/14 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
办公室文员岗位职责
2015/02/04 职场文书
致青春观后感
2015/06/09 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
Oracle创建只读账号的详细步骤
2021/06/07 Oracle