PHP性能优化工具篇Benchmark类调试执行时间

这是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函数获取代码前后的微秒时间数再比较两个值的时间差,如下

    <?phpfunction microtime_float(){    list($usec, $sec) = explode(" ", microtime());    return ((float)$usec + (float)$sec);} $time_start = microtime_float(); usleep(100); $time_end = microtime_float();$time = $time_end - $time_start; echo "Did nothing in $time seconds\n";?>

但这种方法很有局限制,不能大范围的应用,而且每次都需要书写很多代码,适合于简单的调试。具体请查看PHP手册详细说明。

2,通过使用benchmark_Timer类获取代码前后执行的时间差,可以同时获取N行代码的执行时间,操作简单,只需要增加一个marker标记即可,请看下面Benchmark_Timer类的使用说明

如何使用Benchmark_Timer类

Benchmark_Timer类只需要在调试文件中增加Benchmark_Timer类初始化声明和marker标注,文件尾打印各个标注处的执行时间,实例如下

    require_once 'Benchmark/Timer.php';$timer = new Benchmark_Timer();$timer->start();$timer->setMarker("marker 01");usleep(1);$timer->setMarker("marker 02");usleep(2);$timer->setMarker("marker 03");usleep(3);$timer->stop();$timer->display();

打印结果有两种方法:

一种是表格输出方式,$timer->display(); 如下图

另外一种是手动var_dump或print_r打印,$timer->getProfiling();,print_r函数打印如下图

    array0 =>array'name' => string 'Start' (length=5)'time' => string '1265942405.31334800' (length=19)'diff' => string '-' (length=1)'total' => string '-' (length=1)1 =>array'name' => string 'marker 01' (length=9)'time' => string '1265942405.31374400' (length=19)'diff' => string '0.000396' (length=8)'total' => string '0.000396' (length=8)2 =>array'name' => string 'marker 02' (length=9)'time' => string '1265942405.31423000' (length=19)'diff' => string '0.000486' (length=8)'total' => string '0.000882' (length=8)3 =>array'name' => string 'marker 03' (length=9)'time' => string '1265942405.31519200' (length=19)'diff' => string '0.000962' (length=8)'total' => string '0.001844' (length=8)4 =>array'name' => string 'Stop' (length=4)'time' => string '1265942405.31623800' (length=19)'diff' => string '0.001046' (length=8)'total' => string '0.002890' (length=8)

结果说明
1,name表示标注名称,如上 包含两个特殊标注start和stop表示开始和结束,其次是自定义标注 marker 01 marker 02等
2,time表示当前的微秒时间
3,diff表示上一个标记到当前标记的执行时间,这个就是我们需要获取的时间差,没错,看的就是这个值。
4,total表示执行到当前的整个时间

如何使用Benchmark_Iterate类

Benchmark_Iterate类用于调试函数执行的平均时间,与Benchmark_Timer类不同在于可以多次调用同一个函数获取其执行时间的平均值,实例如下:

    require_once "Benchmark/Iterate.php";$bench = new Benchmark_Iterate;function test($i){    echo $i;}$bench->run(100,"test",10);var_dump($bench->get());

通过调用test函数100次获取平均执行时间,结果如下

    array1 => string '0.000486' (length=8)2 => string '0.000466' (length=8).............................(中间省略)99 => string '0.000479' (length=8)100 => string '0.000467' (length=8)'mean' => string '0.000476' (length=8)'iterations' => int 100

结果说明
1,每个数字表示每次调用的时间
2,mean表示函数执行的平均时间,如上调用100次test函数的平均时间为0.000476
3,iterations表示函数调用的次数

如何使用Benchmark_Profiler类

Benchmark_Profiler类用于统计函数的执行次数和执行时间等,实例如下:

    require_once 'Benchmark/Profiler.php';$profiler = new Benchmark_Profiler(TRUE);function myFunction() {    global $profiler;     $profiler->enterSection('myFunction');     //do something     $profiler->leaveSection('myFunction');     return;}//do somethingmyFunction();//do more

结果如下

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

(0)

相关推荐

  • php性能优化分析工具XDebug 大型网站调试工具

    一.安装配置 1.下载PHP的XDebug扩展,网址:http://xdebug.org/ 2.在Linux下编译安装XDebug 引用 tar -xzf xdebug-2.0.0RC3.gz cd xdebug-2.0.0RC3 /usr/local/php/bin/phpize ./configure --enable-xdebug cp modules/xdebug.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429

  • 大家须知简单的php性能优化注意点

    什么情况,可能遇到性能问题: 1.php语法使用的不恰当 2.使用php语言做了它不擅长做的事 3.用php语言连接的服务不给力 4.php自身的短板 5.我也不知道的问题 一般情况:php性能问题不超过二分之一(一般30%~40%) php性能问题解决方向: php语言级的性能优化->php周边问题的性能优化(连接的服务,网络环境)->php语言自身分析和优化 (php语言级) 优化点:少写代码,多用php自身能力 问题:自写代码冗余较多,可读性不佳,导致性能低 为什么低:php代码需要编译

  • PHP性能优化准备篇图解PEAR安装

    什么是PEAR PEAR是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写.它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR就是PHP的CPAN. 为什么要安装PEAR PEAR提供了丰富的PHP扩展工具类,简单易用,可用于各个项目之中.Benchmark是PEAR的一个扩展包,提供Timer.Iterate和Profiler三个工具类,可用于性能优化过程中的断点调试获取代码的执行时间. 如何安装PEAR 打开源码安装

  • PHP性能优化 产生高度优化代码

    1.将PHP升级到最新版 提高性能的最简单的方式是不断升级.更新PHP版本. 2.使用分析器 网站运行缓慢的原因颇多,Web应用程序极其复杂,让人扑朔迷离.而一种可能性在于PHP代码本身.这个分析器可以帮助你快速找出造成瓶颈的代码,提高网站运行的总体性能. Xdebug PHP extension提供了强大的功能,可以用来调试,也可以用来分析代码.方便开发人员直接跟踪脚本的执行,实时查看综合数据.还可以将这个数据导入到可视化的工具 KCachegrind中. 3.检错报告 PHP支持强大的检错功

  • PHP性能优化大全(php.ini)

    第一章  针对系统调用过多的优化 我这次的优化针对syscall调用过多的问题,所以使用strace跟踪apache进行分析. 1.  apache2ctl -X & 使用-X(debug)参数启动httpd进程,这个时候只启动1个httpd进程 2. ps -ef | grep httpd 找到需要strace的pid 3. strace -p $PID -o /tmp/strace.log 发送一个http请求到httpd,就能看到strace信息了.   一.include_path问题

  • 有关PHP性能优化的介绍

    PHP优化对于PHP的优化主要是对php.ini中的相关主要参数进行合理调整和设置,以下我们就来看看php.ini中的一些对性能影响较大的参数应该如何设置. # vi /etc/php.ini(1) PHP函数禁用找到:disable_functions =该选项可以设置哪些PHP函数是禁止使用的,PHP中有一些函数的风险性还是相当大的,可以直接执行一些系统级脚本命令,如果允许这些函数执行,当PHP程序出现漏洞时,损失是非常严重的!以下我们给出推荐的禁用函数设置:disable_function

  • PHP性能优化工具篇Benchmark类调试执行时间

    这是PHP性能优化系列第二期,如何使用PEAR工具类Benchmark逐行获取代码或函数的执行时间. 工欲善其事,必先利其器! 如何安装PEAR和Benchmark 请参考PHP性能优化系列第一期 [PHP性能优化准备篇图解PEAR安装] Benchmark工具类包说明 直接下载:http://pear.php.net/package/Benchmark/downloadBenchmark工具类包共有三个文件,分别是Timer.php.Iterate.php和Profiler.php,三个工具类

  • Android性能优化及性能优化工具

    目录 1.Allaction Tracking (1)追踪 (2)分类我们的内存分配 (3)查看统计图 2.LeakCanary (1)配置 (2)制造一个单例内存泄漏的点 (3)LeakCanary 发出内存泄漏通知 (4)LeakCanary 分析 3.Lint分析工具  性能优化的帮助工具: MAT, Memory Monitor(属于AndroidMonitor中一个模块), HeapTool(查看堆信息), Allaction Tracking, LeakCanary Lint工具 1

  • Android性能优化系列篇UI优化

    目录 前言 一.UI优化 1.1 系统做的优化 1.1.1 硬件加速 1.2 优化方案 1.2.1 java代码布局 1.2.2 View重用 1.2.3 异步创建view 1.2.4 xml布局优化 1.2.5 异步布局框架Litho 1.2.6 屏幕适配 1.2.7 Flutter 1.2.8 Jetpack Compose 1.3 工具篇 1.3.1 Choreographer 1.3.2 LayoutInspector/Android Device Monitor 1.3.3 Systr

  • JavaScript代码性能优化总结篇

    下面是我总结的一些小技巧,仅供参考. 以下代码基本上在jQuery的源码里面都可以看到,如有说得不对的地方,请大家指出. 尽量使用源生方法 javaScript是解释性语言,相比编译性语言执行速度要慢.浏览器已经实现的方法,就不要再去实现一遍了.另外,浏览器已经实现的方法在算法方面已经做了很多优化. 避免全局查找 在一个函数中会用到全局对象存储为局部变量来减少全局查找,因为访问局部变量的速度要比访问全局变量的速度更快些. 尽量减少循环次数 少一层循环,就能提高数倍性能.如果要对一个数组的每个元素

  • mysql性能优化工具--tuner-primer使用介绍

    下载并改变执行权限: wget http://www.day32.com/MySQL/tuning-primer.sh chmod +x tuning-primer.sh ./tuning-primer.sh 结果报告: 会用几种颜色标记: 蓝色:总指标 绿色:表示此参数还可以 红色:表示此参数有严重问题 深红色:表示有问题参数 黄色:一些信息提示 而且还有警告: Note! This script will still suggest raising the join_buffer_size

  • .NET使用结构体替代类提升性能优化的技巧

    目录 前言 现实的案例 内存占用 计算速度 总结 附录 前言 我们知道在C#和Java明显的一个区别就是C#可以自定义值类型,也就是今天的主角struct,我们有了更加方便的class为什么微软还加入了struct呢?这其实就是今天要谈到的一个优化性能的Tips使用结构体替代类.那么使用结构体替代类有什么好处呢?在什么样的场景需要使用结构体来替代类呢?今天的文章为大家一一解答.注意:本文全部都以x64位平台为例 现实的案例 举一个现实系统的例子,大家都知道机票购票的流程,开始选择起抵城市和机场(

  • Flex 性能优化常用手法总结

    众所周知,目前国内的宽带应用并不是像很多发达国家发达,个人应用带宽基本上都是2M以下的,怎么样能够使你的Flex应用能够流畅的运行在客户端的问题,成为了制约每个Flex应用开发程序员的大难题.在这里,我收集整理了一下网络上关于这方面经验,欢迎大家补充. 基本原则: 1. 从外部加载媒体(Media) Heider提到了一个常用的Flex最佳实践--限制嵌入到应用/SWF文件中的媒体的数量,如图像.影片及mp3等资源都可以从外部的SWF文件加载. Flex框架可以直接将图片.mp3及字体等资源编译

  • Flex 编程注意之性能优化、垃圾回收的一些总结

    以下的内容是某个QQ群中得到的,我经过了一些整理和补充,希望对大家有所帮助. 注意:以下内容不是我原创的,请勿擅自转载,本文只是用作记录和总结.:) 垃圾回收的一些知识总结: 1.被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉. 2.父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除. 3.如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null. 4.本对象删除

  • Android TraceView和Lint使用详解及性能优化

    Android lint工具是Android studio中集成的一个代码提示工具,它主要负责对你的代码进行优化提示,包括xml和java文件,很强大.编写完代码及时进行lint测试,会让我们的代码变得非常规范而且避免代码冗余.让我们及时发现代码中隐藏的问题. lint的使用时非常简单的,我看可以用它实现代码布局的优化,Java代码的优化,不过我觉得根本解决问题还是得依赖于开发者的素质. 例子:我们需要删除掉一些无用的变量和布局文件等,这对代码的冗余有很大的帮助. 代码提示我们在6行需要为Ima

随机推荐