![如何诊断 PHP 服务器执行时间并减少其执行时间?](https://linux22.com/image/796808/%E5%A6%82%E4%BD%95%E8%AF%8A%E6%96%AD%20PHP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%E5%B9%B6%E5%87%8F%E5%B0%91%E5%85%B6%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%EF%BC%9F.png)
我在 Amazon EC2 上运行由 PHP 提供支持的 API 服务器,并试图微调性能以减少响应时间。目前,我正在内部测试 PHP 代码的性能,方法是获取请求开始时的毫秒时间,然后在结束脚本之前获取请求结束时的毫秒时间。在实施 memcache 和其他一些技巧后,我收到的大多数请求报告 PHP 代码中的执行时间低于 10-20 毫秒。但是,当我在 Chrome 的开发人员工具中查看网络请求时,我仍然看到命中我的 PHP 脚本的请求显示为:
Sending 0ms
Waiting 145ms
Receiving 1ms
相比之下,对静态文件的请求通常更类似于以下内容:
Sending 0ms
Waiting 15ms
Receiving 1ms
所以我所知道的是,当我运行 PHP 脚本并测试脚本内的执行时间时,执行脚本仅需 10-20 毫秒。此时,我已经解决了使 PHP 代码运行非常快这一简单问题,但我正在尝试弄清楚如何使脚本执行之外的其余流程更快。
所以我的问题是,既然这额外的 120ms 不在我自己的代码流程中,我该如何确定它来自哪里?是 Apache 设置 PHP 进程所花费的时间吗?是 PHP 解释器解析 PHP 文件所花费的时间吗?是 PHP 进程将脚本的响应传递回 Apache 所花费的时间吗?我如何弄清楚这 120ms 的额外时间是如何分配的,以便减少它?
答案1
好吧,您可以通过困难、不太困难和简单的方法来做到这一点。
艰难之路
使用 microtime() 手动分析代码,查看哪些部分耗时最多。对于较小的项目来说,这很容易实现,但实际上很难操作。
不那么困难的方法
设置一个 PHP 调试器来为您执行此操作。调试可能是最好的一个,但是还有很多选择。
它被设置为 PHP 扩展,以便它能够自动为您分析代码并让您知道哪些地方花费了大量时间。
这很可能仍会花费您相当多的时间进行设置,而且绝非易事。
简单的方法
查看新遗物。您安装一个 PHP 扩展并在他们的服务器上设置一个帐户,它将自动为您分析您的代码。
他们的专业版价格相当昂贵,可以为您提供大量数据,帮助您找出 PHP 脚本中哪些部分占用了时间。免费版可以让您了解正在发生的事情。
我起初持怀疑态度,但我对他们提供的数据水平感到非常满意。
此外,他们还提供 15 天的免费 Pro 试用期。
* 我与 New Relic 没有任何关系。