【问题标题】:php tracking function execution timesphp跟踪函数执行次数
【发布时间】:2010-12-13 11:43:56
【问题描述】:

我一直在开发一个 php 框架,并在 10 个左右的网站上使用我们自己的 CMS。

它现在已经到了相当复杂的地步,并且某些类/函数的延迟似乎越来越多。

我想尝试找出最大的延迟发生在哪里,但不知道该怎么做。

我已经尝试安装 xdebug,但它不起作用,我什至不确定它会如何使用。

有谁知道我如何跟踪对类和函数的调用,甚至对它们进行计时?

感谢任何帮助,丹。

【问题讨论】:

  • 你需要一个分析器,所以我建议你去了解 x-debug
  • 它不起作用不是有效的问题描述。如果您不确定 XDebug 的工作原理,请go through the documentation 或将您的问题放入适当的问题中。无论如何,XDebug 是您的最佳选择。
  • Good Free PHP debugger?的可能重复
  • 下面的链接会有帮助吗? php.net/manual/en/function.debug-backtrace.php
  • 好吧,我读了这个问题,我看到丹尼尔正在寻找解决方案来避免使用合适的工具来完成这项工作,所以我的建议是让 x-debug 工作并使用它。但他还不如使用 zend 调试器来分析代码。几乎所有流行的 IDE(如 zend、eclipse、phpstorm)中都内置了调试工具。这就是为什么我将此添加为评论而不是答案

标签: php optimization performance


【解决方案1】:

您想尝试找出最大的延迟发生在哪里,但不知道如何解决。

每个人的第一直觉是开始测量方法使用的时间,计算它们被调用的次数,并逐渐缩小范围,并利用直觉对可以修复的问题做出明智的猜测。但是,还有另一种思考方式,不是从时间的角度,而是从必要性的角度。

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

由于存在延迟,其中一些活动并不是绝对必要的,而使它们成为不必要的方法是使通向它们的分支之一(呼叫点)不是绝对必要的。

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

事实上,如果你这样做random pausing 并检查堆栈,如果调用点只出现在一个样本上,它不会告诉你什么。但是,如果它出现在多个样本上,如果这是您可以避免做的事情,您已经发现了延迟,修复它将使程序更快。更重要的是,几乎没有您可以修复的延迟可以逃脱这种审查。

随着程序变得越来越大和越来越复杂,这种非严格必要的调用点往往会像错误一样潜入。与错误不同,它们不要求您修复它们;它们只会减慢程序的速度,因此最好偶尔这样做。

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多