【问题标题】:PHP performance Target with Xdebug带有 Xdebug 的 PHP 性能目标
【发布时间】:2012-10-19 17:57:11
【问题描述】:

我开始使用 Xdebug 和 WinCacheGrind 来更多地了解我编写的代码。

我目前正在测试一个使用 MySQL 将其存储为持久会话的购物车对象。

以下是对象在典型的“添加到购物车”操作中执行的步骤:

  1. 构造一个使用默认值填充的购物车会话
  2. 在 MYSQL 中检查现有的购物车会话 $_COOKIE['session_id'] 和 $_SERVER['REMOTE_ADDR']。如果是这样,mysql 行填充购物车会话 (12ms)
  3. 在购物车中设置国家代码和州代码,以便进一步计算运费。
  4. 添加项目
  5. 添加项目选项
  6. 根据国家代码和州代码从 MYSQL 获取运输选项(常规、快递、次日)(9.1ms)
  7. 根据购物车中商品的重量计算每个选项的运费
  8. 设置折扣(0.1ms)
  9. 设置用户首选运输选项例如。常规;
  10. 在 MYSQL 中保存购物车会话(93ms),使用 php 函数序列化购物车内容。
  11. 在 VIEW 中显示购物车值。

对 db 的唯一调用是在第 2、6、11 步。

当然会有额外的数据库调用来获取项目详细信息、项目选项和折扣代码。但是对于示例,我将其保持在最低限度。

对于这个 PHP 请求,XDebug 给出的结果是 累计时间:130ms。

不好吗?

我真正的问题是,请求应该以“毫秒”为单位的速度有多快?我听说 YouTube 以 200ms Total 为目标,但我不是 Google,也没有未来工程师的超级天才激光 Intelligent 2055 团队...

感谢您的帮助。

C.

【问题讨论】:

  • 我发现 KCacheGrind 在分析 xdebug 分析器转储方面优于 WinCacheGrind -- 从这里下载 sourceforge.net/projects/precompiledbin
  • 我下载了 KCacheGrind,但软件无法识别 cachegrind.* 文件。
  • 更改文件名:文件格式被识别,但它需要不同的命名约定(我不知道为什么)。

标签: php performance xdebug profiler


【解决方案1】:

不幸的是,在 XDebug 中进行分析本身会为您的 PHP 程序增加显着的性能开销。

因此,您不应依赖 XDebug 为您的代码提供以毫秒为单位的绝对速度数字。 (事实上​​,你在测试平台上的表现不太可能成为现实世界中不同硬件和不同用户数量的性能指标)

相反,您应该专注于使用分析器输出来向您显示程序的哪些部分花费的时间最多。这些是您的瓶颈——无论程序实际运行的速度有多快,某些部分都会占用超过其公平份额的处理器时间,这些是您应该重点改进的方面。这就是 XDebug 的分析器旨在帮助您解决的问题。

就分析 XDebug 的输出而言,我强烈建议放弃 WinCacheGrind 并下载 KCacheGrind。它是一个非常优秀的工具(主要是因为 WinCacheGrind 很久以前就停止了开发)。它有一些出色的可视化工具,可以让您一目了然地了解您的代码的某些部分对整个系统的影响程度。

如果您确实需要了解绝对性能数据,可以考虑从 XDebug 切换到 XHProf。 XHProf 是 Facebook 为 PHP 编写的轻量级分析工具。它不像 XDebug 那样功能齐全(也没有成熟;直到最近才开始受到关注),但它更轻巧,并且在使用时对性能没有太大影响。我仍然会推荐 XDebug,因为它的功能要强大得多,但是这两种工具肯定都有它们的位置。

您可以在此处了解有关 XHProf 的更多信息:http://blog.cnizz.com/2012/05/05/enhanced-php-performance-profiling-with-xhprof/

【讨论】:

  • 感谢您的回答。我肯定会检查 XHProf。关于性能,您对我应该针对 MS 有什么想法吗?
  • 正如我所说,依靠绝对毫秒时间不一定是可靠的指标。但是,如果您总共有 130 毫秒,其中一个函数占用了 90 毫秒,那么您应该很清楚需要在哪里提高性能。
猜你喜欢
  • 2012-07-15
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多