PHP xdebug API接口优化揪出了getimagesize这个鬼

在API优化list中,公司客户系统的服务号客服有个获取聊天消息的接口getHistory请求时间很长,就去优化了下,记下过程。

一,配置环境,追踪使用Xdebug:

1、在https://xdebug.org/下载安装

2、修改php.ini,添加:

[Xdebug]
zend_extension=/alidata/server/php/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
xdebug.default_enable=on
xdebug.trace_output_dir="/tmp/xdebug"
xdebug.trace_output_name=trace.%c.%p
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir="/tmp/xdebug"
xdebug.profiler_output_name="cachegrind.out.%s"

该配置将加载xdebug模块,并设置效能检测文件的输出路径trace_output_dir

3、重启PHP进程:php-fpm restart

二,获取分析结果

在要测试的接口上添加?XDEBUG_PROFILE=1即可触发效能检测,

http://xng.crm.jinxi.cn/admin/room/gethistory?XDEBUG_PROFILE=1

也可以使用谷歌浏览器的Xdebug Helper插件,请求接口前点击profile即可,插件会自动添加XDEBUG_PROFILE的cookie头

去tmp/xdebug即可拿到分析文件

下载qcachegrindwin  图形化分析工具:https://sourceforge.net/projects/qcachegrindwin/

下载该文件使用qcachegrindwin打开(注意把文件名改成callgrind.*)   (wincachegrind不能用下面有备注)

 

 嗯???之前以为是DB读写占用了太长时间,这样看来是获取聊天历史时即时使用php换算getimagesize获取了图片的宽高占用了太长时间,查看PHP文档知道,这个函数需要先下载网络图片然后获取长宽信息,好吧,解决方案是上传图片时保存图片的宽高信息,获取记录是直接获取。

成果:接口从之前的1864ms缩短的581ms done!

 

 注:

使用sourcefog下载的wincachegrind1.0.0.14版本无法打开分析文件。报错:"Cannot find target.",可能是与xdebug版本不匹配导致的。去github下载最新版本后可解决此问题。

v1.1.0.16 在github下载 https://github.com/ceefour/wincachegrind/releases/tag/1.1

 

 

 

后来发现wincachegrind1.0.0.14没有实现图形化很坑啊,

 

转载于:https://www.cnblogs.com/timseng/p/10825470.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值