使用Xdebug实现PHP性能目标

使用Xdebug实现PHP性能目标,php,performance,xdebug,profiler,Php,Performance,Xdebug,Profiler,我开始使用Xdebug和WinCacheGrind来了解更多关于我编写的代码 我目前正在测试一个购物车对象,它使用MySQL存储为一个持久会话 以下是对象在典型的“添加到购物车”操作中执行的步骤: 构造一个包含默认值的购物车会话 使用检查MYSQL中现有的购物车会话 $\u COOKIE['session\u id']和$\u SERVER['REMOTE\u ADDR']。如果是,mysql 行填充购物车会话(12毫秒) 在购物车中设置国家/地区代码和州代码,以便进行进一步的装运计算 添加项目

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

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

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

  • 构造一个包含默认值的购物车会话
  • 使用检查MYSQL中现有的购物车会话 $\u COOKIE['session\u id']和$\u SERVER['REMOTE\u ADDR']。如果是,mysql 行填充购物车会话(12毫秒)
  • 在购物车中设置国家/地区代码和州代码,以便进行进一步的装运计算
  • 添加项目
  • 添加项目选项
  • 根据国家代码和州代码(9.1ms)从MYSQL获取配送选项(常规、快速、下一天)
  • 根据购物车中物品的重量计算每个选项的运输成本
  • 设置折扣(0.1ms)
  • 设置用户首选的发货选项(常规发货除外)
  • 在MYSQL(93ms)中保存购物车会话,使用php函数序列化购物车内容
  • 在视图中显示购物车值
  • 对db的唯一调用是在步骤2、6和11

    当然,将有额外的数据库调用以获取项目详细信息、项目选项和折扣代码。但举个例子,我尽量少用

    对于这个PHP请求,XDebug给出 累计时间:130毫秒。

    坏吗

    我真正的问题是,请求的“ms”应该有多快?我听说YouTube的目标是200毫秒,但我不是谷歌,也没有未来工程师的超级天才激光智能2055团队

    谢谢你的帮助


    C.

    不幸的是,XDebug中的评测本身会给PHP程序增加大量的性能开销

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

    相反,您应该专注于使用探查器输出来显示程序的哪些部分占用的时间最多。这些是您的瓶颈——不管程序实际运行的速度有多快,某些部分占用的处理器时间将超过其合理份额,这些是您应该重点改进的方面。这就是XDebug的profiler旨在帮助您实现的目标

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

    如果你真的需要知道你的绝对业绩数字,你可以考虑从XDebug转为XHPROF。XHProf是Facebook为PHP编写的轻量级分析器工具。它不像XDebug那样功能齐全(也不是很成熟;只是最近才开始被注意到),但它更轻,并且在使用时对性能没有太大影响。我仍然推荐XDebug,因为它的功能要强大得多,但这两种工具都有自己的位置


    您可以在此处找到有关XHProf的更多信息:

    我发现KCacheGrind在分析xdebug探查器转储方面远远优于WinCacheGrind--从这里下载它我下载KCacheGrind,但cachegrind.*软件无法识别文件。更改文件名:识别文件格式,但是它需要一个不同的命名约定(我不知道为什么)。谢谢你的回答。我会查清楚的。关于性能,你知道我应该以毫秒为目标吗?正如我所说,依赖绝对毫秒时间不一定是一个可靠的指标。然而,如果您总共有130毫秒,其中一个函数需要90毫秒,那么您应该非常清楚需要在哪里改进性能。