使用 blackfire.io 分析 PHP 7 应用程序,为啥我看到相同代码的不同 cpu 时间?

Posted

技术标签:

【中文标题】使用 blackfire.io 分析 PHP 7 应用程序,为啥我看到相同代码的不同 cpu 时间?【英文标题】:Profiling PHP 7 application with blackfire.io, why i see different cpu time for same code?使用 blackfire.io 分析 PHP 7 应用程序,为什么我看到相同代码的不同 cpu 时间? 【发布时间】:2016-08-17 09:55:23 【问题描述】:

我支持和返工旧的 php7 应用程序。此应用程序不使用自动加载,而不是此应用程序需要单个文件中的所有类,只需使用类遍历所有目录。老团队认为这是一种很好的优化方式。

所以我用blackfire做了一些测试,发现这个包括可以消耗一半的cpu时间。我做了自动加载实验,将cpu时间减少了两倍,内存消耗减少了三倍。结果很好。

然后我继续对没有自动加载的旧代码进行实验,发现在某些情况下,巨型包含不会消耗很多时间(而且它是带有很多循环的平面文件,没有 if-else 语句)。

在 blackfire 面板中,看起来包含包含的文件具有非常显着的被调用者数量。在一种情况下,这个文件有 21 个被调用者,工作 132 毫秒,在另一种情况下,它有 6 个被调用者和 2.63 毫秒。

我不明白这种差异的原因。我的假设是 PHP7 非常聪明,可以分析哪些类真正应该编译成字节码,哪些不应该。

有人知道为什么会存在这种差异吗?

PS:我不能显示黑火报告,PM 不允许这样做。

【问题讨论】:

【参考方案1】:

没有代码或报告很难猜测。但我会看看这个页面。也许您正在审查的代码中存在那里解释的内容。

https://blackfire.io/docs/24-days/22-php-internals

【讨论】:

以上是关于使用 blackfire.io 分析 PHP 7 应用程序,为啥我看到相同代码的不同 cpu 时间?的主要内容,如果未能解决你的问题,请参考以下文章

Discuz 7.2 faq.php漏洞分析

跟厂长学PHP内核:源码分析的环境与工具

如何避免在 PHP 7 中的每个文件上重新声明刻度

7.员工转正问题的实现-PHP

在 Drupal 7 中访问 html.tpl.php 中的节点属性

PHP源码分析之parse_url()的2个小trick