PHP Symfony优化控制器执行时间线

时间:2017-03-10 17:32:19

标签: php rest apache2 symfony http-caching

我正在使用Symfony版本3.1.9来与MySQL数据库进行通信的REST API。

大多数POST API(控制器功能)的平均时间约为3-4秒!是的~3-4秒:(

对于其中一个API,以下是 Symfony Profiler 的详细信息:

首次执行API效果指标

  

13307 ms总执行时间
  485 ms Symfony初始化
  34.25 MB峰值内存使用

第二次执行API性能指标

  

4862 ms总执行时间
  266 ms Symfony初始化
  34.00 MB峰值内存使用

Here是第二次执行时间的屏幕截图,看起来控制器在一些繁重的处理中非常繁忙但是我在控制器功能中尝试做的就是从MySQl数据库访问信息并且我已经确认通过Doctrine进行MySql查询的时间不超过1毫秒。

我尝试了什么?

  • 如果适用所有GET请求,我使用的Cache-Control标头如下:

    Cache-Control: must-revalidate=true  
    Cache-Control: max-age=180  
    

    由于Ubuntu服务器机器(使用Apache)因负载和执行时间而重新启动,这没有多大帮助。如果是POST API,我仍然无能为力。

  • 我也尝试在Apache服务器上启用OPcache,但不确定是否有帮助,因为我在优化应用服务器和服务器配置方面非常天真。

请帮忙。如果需要任何其他细节,请在评论中告诉我。

1 个答案:

答案 0 :(得分:1)

您可以使用stopwatch组件更准确地了解控制器内部的时间。尝试准确地分析在“开发者”中运行的Symfony应用程序。环境并不值得 - 生产中使用的大部分潜在加速都被删除了,像分析器这样的开发工具需要花费大量的时间来生产 - 以及构建整个容器。

您可以将探查器阈值降低为0并查看正在记录的所有内部事件,然后从那里开始使用Blackfire等工具来优化慢速呼叫和数据库查询。

同时查看探查器中的Doctrine选项卡将显示正在进行的查询以及查询的数量。这也可以快速显示可能出现问题的地方 - 主要来自比您最初想的更多的电话。