PHP/xdebug profiler require_once 性能不佳

Posted

技术标签:

【中文标题】PHP/xdebug profiler require_once 性能不佳【英文标题】:PHP / xdebug profiler require_once poor performance 【发布时间】:2012-07-15 18:27:17 【问题描述】:

我刚开始使用 xdebug 来分析我的应用程序,并立即注意到结果中有一些奇怪的地方。 require_once 函数之一显示占用大约 12% 的处理时间。在整个应用程序中还有很多其他对require_once 的调用,它们都占用了不到 1% 的处理时间。

性能不佳的require_once 包含的文件与其他任何文件都没有显着差异或更大,所以我不确定是什么导致了问题。有没有其他人经历过这样的事情?

编辑:想提供更多信息。我正在使用 XAMPP 在 Windows 上进行分析。通常,该应用程序在 unix 机器上运行。我没有一个简单的方法可以将 xdebug 安装到盒子上,所以我可能无法尝试以这种方式比较结果。

最后一次编辑:以下是代码的想法,以防万一(出于标准的 CYA 法律原因,故意含糊不清):

这个类是包含速度慢的类(test.inc):

require_once('/xx/yy/zz/dao/basedao.inc');
require_once('/xx/yy/zz/vo/test.inc');

class TestDAO extends BaseDAO 
  // bunch of code to handle database records and return VO objects

这是包含的文件:

require_once('/xx/yy/zz/vo/basevo.inc');

class Test extends BaseVO 
  // bunch of properties, getters/setters, that kinda stuff

我还有很多其他的 VO/DAO 对象,它们的构建方式完全相同,没有任何问题。所有都位于相同的各自路径内。

【问题讨论】:

最后一件事:您提到您无法在 Linux 平台上进行调试。您可以尝试在本地 PC 上创建 VM,以便在本地运行 Linux 副本。与 Windows 系统相比,它可能会让您更准确地了解您的代码是如何远程运行的。 好建议,我明天试试! 我终于从 Linux 上的代码中得到了一些分析器结果,一切都在我最初的预期中...... :|大部分处理时间都花在您期望的地方,例如数据库调用和磁盘 IO。之前突出的包含仍然稍微慢一些,但并没有那么大的差距。看起来这个文件是第一个包含一些其他常见文件的文件,所以它会稍微慢一点是有道理的。从现在开始,我将避免像瘟疫一样在 Windows 上进行基准测试,因为我对不同的结果没有任何解释。 【参考方案1】:

这听起来确实很奇怪。绝对值得追求,尽管如果没有看到实际代码就很难确定它。单个require_once() 的总程序时间的 12% 听起来确实很多余。

但这里有一些关于可能的调查途径的想法:

    require_once() 保留一个已包含文件的查找表,因此可能会降低必须参考该查找表的速度。 如果是这个原因,您可以尽可能使用require() 而不是require_once() 来解决它。

    也许是路径查找?您是否包含带有文件名的路径?如果没有,它将在许多地方检查以查找文件;也许它不是它看起来的第一个地方,它需要更长的时间才能找到文件才能包含它。 如果这是原因,您可以通过更具体地说明代码中的路径来解决它。

希望对您有所帮助。很想知道结果如何。

哦,顺便说一句——如果你的代码中最大的问题是require_once(),那么听起来你的代码做得很好!我梦想着那一天require_once() 甚至出现在我的分析器报告中,更不用说产生重大影响了。

【讨论】:

感谢您的快速回复。我会调查你名单上的#1,看看是否有任何改变。至于#2,我使用的是文件的绝对路径,所以我无法想象它必须进行任何搜索。 没有变化,现在 require 函数显示为占用了 ~12%。这绝对是我遇到的奇怪问题之一。 @cdwhatcott - 是的。非常非常奇怪。该文件是否与您包含的其他文件位于同一目录中?它所在的目录有什么特定的问题吗? 它与许多其他包含在同一目录中,大约有 7 或 8 个其他文件来自该路径。权限看起来也一样。 所以为了完成测试,如果将慢文件A的所有代码复制+粘贴到快文件B,然后删除包含原始文件的行,会发生什么?换句话说,新文件现在可以直接替换旧文件。还是一样快吗?也许您的文件有磁盘错误导致它难以加载?一个新的副本可能会解决它。 (但如果是这种情况,您需要小心可能的驱动器故障)

以上是关于PHP/xdebug profiler require_once 性能不佳的主要内容,如果未能解决你的问题,请参考以下文章

kcachegrind 难以链接 php xdebug 调用

ubuntu中PHP xdebug 断点调试

PHP Xdebug安装及配置

mac+php+xdebug

windows 下 PHP Xdebug 安装

vs code 配置 php xdebug