这是PHP性能优化系列的第二阶段。如何使用PEAR工具类Benchmark逐行获取代码或函数的执行时间?如果一个工人想做好工作,他必须先磨他的工具!如何安装PEAR和Benchmark,请参考第一期PHP性能优化系列【PHP性能优化准备章节插图PEAR安装】Benchmark工具包说明直接下载:http://pear.php.net/package/Benchmark/downloadBenchmark工具包有三个文件。分别是Timer.php、Iterate.php、Profiler.php,功能相同,但侧重点不同,都是用来调试代码,得到程序的执行时间。1、Benchmark_Timer类的原理与通过microtime函数获取微秒时间并进行比较前后两个时间值的差值相同。2.调试函数的Benchmark_Iterate类的平均执行时间。3.Benchmark_Profiler类用于统计代码和函数的执行时间以及函数的调用时间。具体用法:三个文档中有详细的用法示例。如何获取一行或一段代码的执行时间1,通常使用microtime函数获取代码前后的微秒时间,然后比较两个值的时间差,如下。phpffunction micro time _ float(){ list($ usec,$sec)=explode(',micro time());return((float)$ usec(float)$ sec);} $ time _ start=micro time _ float();us LEEP(100);$ time _ end=micro time _ float();$ time=$ time _ end-$ time _ start;echo“在$time秒内没有执行任何操作 n”;然而,这种方法有局部局限性,不能广泛使用。而且每次需要写很多代码,适合简单调试。详情请参考PHP手册。2.通过使用benchmark_Timer类获取代码执行前后的时间差,可以同时获取n行代码的执行时间。操作简单,只需添加一个标记标记。请参见下面关于如何使用Benchmark_Timer类的说明。Benchmark_Timer类只需要在调试文件中添加Benchmark_Timer类的初始化声明和标记注释,并在文件末尾打印每个注释的执行时间。示例如下:require _ once ' benchmark/timer . PHP '。$ Timer=new Benchmark _ Timer();$ timer-start();$ timer-setMarker(' marker 01 ');us LEEP(1);$ timer-setMarker(' marker 02 ');usleep(2);$ timer-setMarker(' marker 03 ');usleep(3);$ timer-stop();$ timer-display();打印结果有两种方式:一种是表格输出,$ timer-display();下图。
另外一种是手动var_dump或打印_r打印,$ timer-getProfiling();打印_r函数打印如下图array0=数组名称=字符串开始'(长度=5)'时间'=字符串' 1265942405.31334800 '(长度=19)'diff'=字符串'-'(长度=1)“总计”=字符串'-'(长度=1)1=数组名称=字符串标记01 '(长度=9)'时间'=字符串' 1265942405.3137400 '(长度=19)'diff'=字符串' 0.000结果说明1、名称表示标注名称,如上包含两个特殊标注开始和停止表示开始和结束,其次是自定义标注标记01标记02等2、时间表示当前的微秒时间3、差异表示上一个标记到当前标记的执行时间,这个就是我们需要获取的时间差,没错,看的就是这个值总共四人表示执行到当前的整个时间如何使用基准_迭代类基准_迭代类用于调试函数执行的平均时间,与基准计时器类不同在于可以多次调用同一个函数获取其执行时间的平均值,实例如下:需要“一次”基准测试/迭代。PHP ';$ bench=新基准_ Iterate功能测试($ I){ echo $ I;} $台架试验(100,'测试',10);var _ dump($ bench-get());通过调用试验函数100次获取平均执行时间,结果如下array1=字符串"0.000486"(长度=8)2=字符串"0.000466"(长度=8)....(中间省略)99=字符串"0.000479"(长度=8)100=字符串"0.000467"(长度=8)"平均值"=字符串"0.000476"(长度=8)"迭代次数"=int 100结果说明1,每个数字表示每次调用的时间2、均值表示函数执行的平均时间,如上调用100次试验函数的平均时间为0.0004763,迭代表示函数调用的次数如何使用基准分析器类基准分析器类用于统计函数的执行次数和执行时间等,实例如下:需要一次“基准测试/评测器”。PHP ';$profiler=新的Benchmark_Profiler(真);FuncTion my FuncTion(){ global $ profiler;$ profiler-EnTER部分('我的函数');//做点什么$ profiler-离开部分('我的函数');返回;}//do某物my function();//做更多结果如下
Benchmark_Profiler类在实际性能调试中很少使用,因为有更好的工具,比如xDebuger,所以可以直接忽略!Benchmark工具类对于逐行调试中分析程序性能问题非常实用。Benchmark_Timer类主要用于调试各个代码段的时间点,通过获取执行时间来优化程序,提高代码的性能。这里就不深入讨论了。如果您在使用过程中有任何问题,欢迎与我们交流!如果你觉得这种逐行调试很累很辛苦,又想整体掌握程序的性能,这种Benchmark调试工具无法满足你的需求。下一期将讨论PHP性能调试工具xDebuger的安装和使用。Materials microtime (php3、php4、PHP 5)micro time-返回当前Unix时间戳和微秒数,并描述混合的micro time([boolget _ as _ float])micro time()当前Unix时间戳和微秒数。该函数仅在支持gettimeofday()系统调用的操作系统下可用。如果在没有可选参数的情况下调用,此函数将返回一个格式为“msec sec”的字符串,其中sec是自Unix时代(0:00:00 1970年1月1日格林尼治标准时间)以来的秒数,msec是微秒。字符串的两部分都在几秒钟内返回。如果给定了get_as_float参数,并且其值等于TRUE,则microtime()将返回一个浮点数。请注意, get_as_float参数是在PHP 5.0.0中新添加的。扩展材料PHP基准/定时器类PHP基准和优化PHP脚本速度。