看到一个很有用的东东,收藏。。

http://blog.csdn.net/yukon12345/article/details/11408617

~~~~~~~~~~

使用:                                                                       
设置好后就可以重启wamp来看看效果:
我们使用XDEBUG_PROFILE作为url的一个参数写在某个页面上后,转入页面,然后到xdebug.profiler_output_dir所定的路径下,就会发现生成了一个cachegrind.out.开头的文件,这就是webgrind需要分析的文件
进入webgrind主页面:页面很简单,右上角有一排下拉列表

第一项参数参数其实我也纠结了一下,怎么才容易想清楚和说明白:

webgrind把所有被调用函数/方法首先做一个排序,由高到低显示。然后取出前N个,使他们耗时比率之和在90-100%之间。

要注意的是,最好不要选择100%,这样将会显示所有被调用的函数/方法,如果是一个代码复杂的页面,那么webgrind偶尔会被卡死。并且通常我们只要关注耗时前几名的函数即可。

第二个就是选择profile文件。默认是分析最新一次的xdebug记录。如果之前设置好路径和记录机制那么我们就会发现下拉列表里有很多选项。

第三个选项是显示百分比/毫秒/微秒。

下面的彩色进度条一样的东东是耗时量比较条。蓝代表php内置函数,灰色(这里占用很小看不出)代表requir/onclude,绿代表类方法,橙黄代表类其他过程函数 (用户自定义函数)

结果查看

然后下面的分析列表的样子:(选了毫秒作为显示单位)

对于其中一些参数,我在结合我的官网翻译以及stackoverflow看到的解释是这样的:

Invocation Count
被调用执行的次数

Total Self Cost - 函数自身开销耗时  毫秒/ 微秒 /百分比(并不包含调用其他函数)
Total Inclusive Cost - 综合耗时。包括自身耗时和调用所有的其他函数的耗时

细节分析

我经过试验,才明确了解了几个数据的区别:

测试代码:

  1. <?php
  2. //仅使用内置函数
  3. function t1(){
  4. time();
  5. }
  6. //自定义函数外再执行一次
  7. time();
  8. sleep(1);
  9. t1();
  10. //t2调用自定义函数
  11. function t2(){
  12. t1();
  13. }
  14. t2();
  15. //增加内置函数耗时
  16. function t3(){
  17. sleep(1);
  18. }
  19. t3();
  20. //t4增加调用自定义函数t3一次。
  21. function t4(){
  22. t3();
  23. sleep(1);
  24. }
  25. t4();
  26. //t5增加非调用函数式内耗 for循环10万次,并调用t4
  27. function t5()
  28. { $u=0;
  29. for($i=0;$i<100000;$i++)
  30. {  $u+=$i;   }
  31. t4();
  32. }
  33. t5();
  34. ?>

得出:

因此我们可以得出最终结论:

  1. invocation count 表示的是整个php页面从载入到执行完毕呈现,各种函数被调用的总次数(如sleep不管被哪个函数调用,总共页面期执行了6次,t3被t4直接调用、t5间接调用一次,自身执行一次)
  2. total self cost 表示的是函数自身消耗(就如t5中10万次循环消耗了31毫秒,sleep执行了2000毫秒,但自身消耗并不把其他任何函数调用算在其中)
  3. total inclusive cost 表示的是此函数从开始到执行完毕所用消耗 ,包括自身消耗和调用其他函数消耗

点击一个父函数名后出现展开:

    1. Calls - 此函数中调用并执行的所有函数/方法名 次数 及耗时
    2. Total Call Cost - 被此父函数调用时,执行的总耗时 (the total time executing this function, when called from the parent function)
    3. Count - 被此父函数调用时,执行的次数。number of times the parent calls the child

如何看懂XDEBUG+WEBGRIND?(转)的更多相关文章

  1. [转]看懂UML类图

    这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...

  2. 看懂Oracle执行计划

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  3. 一张图看懂ANSYS17.0 流体 新功能与改进

    一张图看懂ANSYS17.0 流体 新功能与改进   提交 我的留言 加载中 已留言   一张图看懂ANSYS17.0 流体 新功能与改进 原创2016-02-03ANSYS模拟在线模拟在线 模拟在线 ...

  4. 怎样看懂Oracle的执行计划

    怎样看懂Oracle的执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when ...

  5. 看懂SqlServer查询计划【转】

    原文链接:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 开始 SQL Server 查找记录的方法 SQL Server ...

  6. 看懂UML类图

    这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...

  7. [转]看懂ExtJS的API

    原文地址:http://www.cnblogs.com/youring2/archive/2013/03/05/2944004.html ExtJS的功能很强大,相应的其API也很庞大,并且看起来并不 ...

  8. 看懂UML类图与时序图

    看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...

  9. 亲子之间,在于看懂,无关耐心zz

    每当有人告诉我:『你对孩子真有耐心!』时,我总会想起我的金项链,当越来越多人说的时候,我就越想找出来,我翻箱倒柜的找,越心急却越找不到,那 一条金项链从我十八岁那一年一直戴在我的脖子上一直到女儿两岁, ...

随机推荐

  1. PHP上传文件出现文件名被截掉第一个字符的问题

    最近用PHP做了一个简单的上传功能,结果出现了一个意想不到的问题.我上传的文件,在获取$_FILES的时候发现文件名的第一个字符被截掉了,因为最开始上传的一直是数字或者字母为名称的文档,也没有太在意这 ...

  2. Linux 安装字体

    把XP下的字体C:\WINDOWS\FONTS\simsun.ttc(也就是宋体,大小为10M),把他重命名为 simsun.ttf 拷贝simsun.ttf 字体到 /usr/share/fonts ...

  3. crontab,at命令,常见问题

    crontab命令 前 一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的. Linux 系统上面原本就有非常 ...

  4. android开发常用组件(库)推荐

    版本兼容:官方 support 全家桶 网络请求:Android-Async-Http.Retrofit.OkHttp.Volley图片加载:Glide 和 Universal-Image-Loade ...

  5. jquery1.7.2的源码分析(五)$.support

    $.support 的英文注释很详细的介绍的这里,就稍微的写了下 Query.support = (function() { var support, all, a, select, opt, inp ...

  6. nginx 配置自签名的ssl证书

    最近要搭一个https的测试环境,使用nginx做反向代理. 网上找过不少资料,但过程不是很完整,吃了不少亏,故把自己的操作过程总结下来.如果你刚好遇到这个问题,希望对你有帮助! ********** ...

  7. [原创作品]Javascript内存管理机制

    如果你也喜欢分享,欢迎加入我们:QQ group:164858883 内存策略:堆内存和栈内存栈内存:在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个 ...

  8. Oracle11g完全卸载步骤

    Oracle11g完全卸载步骤:1. 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务.2. 开始->程序->Oracle - OraHome ...

  9. Ajax&XMLHttpRequest

    XMLHttpRequest 简单省力的方法 将文件编码成base64通过Ajax上传 HTML5学习之FileReader接口 HTML5学习之FileReader接口 通过Ajax方式上传文件,使 ...

  10. ResourceDictionary 和 XAML 资源引用

    XAML 定义应用的 UI,并且 XAML 也可以定义 XAML 中的资源.资源通常是对你希望多次使用的某些对象的定义.你要为 XAML 资源定义一个键,以供将来引用,该键的作用类似于资源的名称.你可 ...