在PHP中分析超过函数调用

Ogo*_*Ogo 9 php performance profiling

我已经开始使用PHP开始我的第一个有点认真的编程项目,并且很难获得良好的分析信息.我使用xdebug和cachegrind来分析代码,但它假设函数的"自我"执行时间是函数执行所花费的总时间减去它调用的任何函数的聚合时间.

虽然这本质上是正确的,但是当我尝试优化代码时,它没有多大帮助.例如,我有一个带有两个if语句的简单函数,它返回一个带有两个值的数组,根据xdebug,它占总执行时间的26%.它使用array_key_exists,我可以看到这些函数调用的执行时间约为1%.我看不到的是其他25%的执行时间如何与其余代码相比较.if语句需要多长时间,获取值对,将这些值放入数组中,然后返回数组?

我在文档中遗漏了一些xdebug标志吗?或者是否有PHP的分析工具,它将分析变量赋值,运算符,基本数据类型的构造以及其他非函数调用?优选地,不假设脚本可通过web服务器获得的东西.

我正在寻找的东西的一个例子是perl的nytprof.请注意,它描述了函数中的每一行代码(除了最后一次推送,它永远不会被执行).

Mik*_*vey 3

当您在 下运行程序时xdebug,您应该能够随机地手动中断它的执行,然后显示调用堆栈如果您多次执行此操作,则任何占用大量时间的代码都将出现在这些堆栈示例中。这就是随机暂停技术。

这有点大脑的转变。为了发现问题而进行的自拍、测量函数执行时间或计算调用次数等充其量只是间接信息。相反,它表明任何实际上花费大量时间的事情都无法逃脱你的注意,如果你只是顺便去看一下。你看到它“正在做”的任何事情(这意味着你多次捕获堆栈上的任何代码行)如果你能避免这样做的话,将会带来很好的加速。测量精度无关紧要。您已经找到了它,因此您可以修复它,然后测量加速比。