php跟踪功能执行时间

时间:2010-12-13 11:43:57

标签: php optimization performance

我已经开发了一段时间的PHP框架,并使用我们自己的CMS在10个左右的网站上使用它。

现在它变得非常复杂,某些类/功能的延迟似乎越来越多。

我想尝试找出最大的延误发生在哪里但不确定我会怎样做。

我已经尝试过安装xdebug但它没有用,我甚至不确定它是如何被使用的。

有没有人知道我如何跟踪对类和函数的调用,甚至可以计时?

任何帮助表示赞赏,Dan。

1 个答案:

答案 0 :(得分:0)

您想尝试找出最大延迟发生的位置,并且不确定如何进行。

每个人的第一直觉是开始测量方法所用的时间,并计算它们被调用的次数,并逐步缩小范围,并使用直觉对可以修复的内容做出明智的猜测。然而,还有另一种思考方式,不是在时间方面,而是在必要性方面。

该程序遍历一个调用树。主程序调用A,然后调用B,依此类推。 A调用C,然后调用D等。这就是遍历调用树,一直到叶子,这是简单的语句,系统调用和I / O. 如果所有这些活动都必须必须,那么程序就会尽快完成。

由于存在延误,其中一些活动并非绝对必要,而且不必要的方式是导致它们的一个分支(呼叫点)不是绝对必要的。

假设您的延迟费用占50%。然后这些呼叫点在50%的时间内处于活动状态并且在呼叫堆栈上。因此,如果您随机暂停程序并显示堆栈,您将看到它的几率为50%。如果你这样做了10次,它会出现在其中5个,或多或少。

事实上,如果您执行此类random pausing并检查堆栈,如果呼叫点仅出现在一个样本上,则它不会告诉您任何内容。但如果它出现在多个样本上,并且如果它是你可以避免做的事情,你发现了延迟,修复它会使程序更快。更重要的是,几乎没有任何可以解决的延迟,可以逃脱这种审查。

随着程序变得越来越大,越来越复杂,这些非严格必要的调用点就像bug一样蔓延。与错误不同,它们并不要求你修复它们;他们只会减慢程序的速度,所以偶尔这样做很好。