这是php性能优化系列第二期,如何使用pear工具类benchmark逐行获取代码或函数的执行时间。
工欲善其事,必先利其器!
如何安装pear和benchmark
请参考php性能优化系列第一期 [php性能优化准备篇图解pear安装]
benchmark工具类包说明
直接下载:http://pear.php.net/package/benchmark/download
benchmark工具类包共有三个文件,分别是timer.php、iterate.php和profiler.php,三个工具类功能相同,只是侧重点不同,都是用于调试代码获取程序的执行时间。
1,benchmark_timer类原理与通过microtime函数获取微秒时间再比较前后两个时间值的差相同。
2,benchmark_iterate类用于调试函数的平均执行时间。
3,benchmark_profiler类用于统计代码和函数的执行时间以及函数的调用次数。
具体使用方法三个文件内都有详细的使用实例。
如何获取一行或一段代码的执行时间
1,通常使用microtime函数获取代码前后的微秒时间数再比较两个值的时间差,如下
但这种方法很有局限制,不能大范围的应用,而且每次都需要书写很多代码,适合于简单的调试。具体请查看php手册详细说明。
2,通过使用benchmark_timer类获取代码前后执行的时间差,可以同时获取n行代码的执行时间,操作简单,只需要增加一个marker标记即可,请看下面benchmark_timer类的使用说明
如何使用benchmark_timer类
benchmark_timer类只需要在调试文件中增加benchmark_timer类初始化声明和marker标注,文件尾打印各个标注处的执行时间,实例如下
打印结果有两种方法:
一种是表格输出方式,$timer->display(); 如下图
另外一种是手动var_dump或print_r打印,$timer->getprofiling();,print_r函数打印如下图
结果说明
1,name表示标注名称,如上 包含两个特殊标注start和stop表示开始和结束,其次是自定义标注 marker 01 marker 02等
2,time表示当前的微秒时间
3,diff表示上一个标记到当前标记的执行时间,这个就是我们需要获取的时间差,没错,看的就是这个值。
4,total表示执行到当前的整个时间
如何使用benchmark_iterate类
benchmark_iterate类用于调试函数执行的平均时间,与benchmark_timer类不同在于可以多次调用同一个函数获取其执行时间的平均值,实例如下:
通过调用test函数100次获取平均执行时间,结果如下
结果说明
1,每个数字表示每次调用的时间
2,mean表示函数执行的平均时间,如上调用100次test函数的平均时间为0.000476
3,iterations表示函数调用的次数
如何使用benchmark_profiler类
benchmark_profiler类用于统计函数的执行次数和执行时间等,实例如下:
结果如下
benchmark_profiler类在实际性能调试中使用并不多,因为还有比这个更好的工具,如xdebuger等,因此可直接忽略!
benchmark 工具类在使用调试中针对逐行调试来分析程序性能问题非常实用,主要使用benchmark_timer类调试各代码段的时间点,以通过获取执行时间来优化程序提高代码的性能。这里就不再深入讨论,如果在使用的过程中有什么问题欢迎大家一起交流!
如果你发现这种逐行调试很累很辛苦,如果你想从整体上把握程序的性能情况,这个benchmark类调试工具就不能满足你的需求,下期将讨论php性能调试工具xdebuger的安装与使用。
相关资料
microtime
(php 3, php 4, php 5)
microtime -- 返回当前 unix 时间戳和微秒数
说明
mixed microtime ( [bool get_as_float] )
microtime() 当前 unix 时间戳以及微秒数。本函数仅在支持 gettimeofday() 系统调用的操作系统下可用。
如果调用时不带可选参数,本函数以 "msec sec" 的格式返回一个字符串,其中 sec 是自 unix 纪元(0:00:00 january 1, 1970 gmt)起到现在的秒数,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。
如果给出了 get_as_float 参数并且其值等价于 true,microtime() 将返回一个浮点数。
注意: get_as_float 参数是 php 5.0.0 新加的。
扩展资料
php benchmark/timer class
php benchmark
benchmark and optimize php script speed
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!