zoukankan      html  css  js  c++  java
  • 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没有实现图形化很坑啊,

  • 相关阅读:
    逐个图片保存成视频
    GitHub搜索
    用cmd运行jmeter并生成报告
    jmeter-json提取器提取的内容含”引号
    jmeter-JSON提取器
    git 上传Access denied解决方法
    Jmeter鲜为人知的jsonpath用法
    selenium 安装流程、下载chromedriver
    jmeter-抓取数据库数据,循环请求1000次(变量嵌套变量)
    jmeter—获取当前时间(年、月、日),往前/往后n天
  • 原文地址:https://www.cnblogs.com/timseng/p/10825470.html
Copyright © 2011-2022 走看看