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没有实现图形化很坑啊,
PHP xdebug API接口优化揪出了getimagesize这个鬼的更多相关文章
- 移动端API接口优化的术和结果
最近一直在忙工作的事情,所以文章写得有些少. 有3-5篇文章都是写到一半然后被别的事情给打断了,所以,我得找个时间好好补补. 最近一直在关注移动端接口API的可用性问题,在移动时代这个做这个优化能产生 ...
- 优化API接口响应速度
前言 API接口响应慢? SLA一直提不上去? 其实这是后端程序员想进阶必须要跨过去的坎:就是把它优化掉. 那么这其中到底有没有套路呢?答案是:有的. 本文将介绍目前正在用并且十分“无脑”有效的这个套 ...
- 年轻人不讲武德,竟然重构出这么优雅后台 API 接口
Hello,早上好,我是楼下小黑哥~ 最近偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐 ...
- 优秀的API接口设计原则及方法(转)
一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的 ...
- 分享一个开源免费、目前最好的API接口管理平台----eoLinker
一.概况 eoLinker 是目前业内领先.国内最大的在线 API 接口管理平台,提供自动生成 API 文档.API 自动化测试.Mock 测试.团队协作等功能,旨在解决由于前后端分离导致的开发效率低 ...
- vue中Axios的封装和API接口的管理
前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...
- 如何防止短信API接口遍历
短信API接口在web中得到越来越多的应用,如用户注册,登录,密码重置等业务模块都会使用手机验证码进行身份验证.一般情况下,我们会采用这样的安全策略,将短信发送频率限制在正常的业务流控范围内,比如,一 ...
- 亿级用户下的新浪微博平台架构 前端机(提供 API 接口服务),队列机(处理上行业务逻辑,主要是数据写入),存储(mc、mysql、mcq、redis 、HBase等)
https://mp.weixin.qq.com/s/f319mm6QsetwxntvSXpKxg 亿级用户下的新浪微博平台架构 炼数成金前沿推荐 2014-12-04 序言 新浪微博在2014年3月 ...
- 宝藏发现之API接口高效协作神器Apifox
概述 背景 Apifox官方地址 https://www.apifox.cn/ 前面文章我们已经围绕微服务展开,缺少一个关键前置流程,那就是API接口设计,而在API接口设计开始前本篇先推荐一个非常好 ...
随机推荐
- spring 5.x 系列第13篇 —— 整合RabbitMQ (xml配置方式)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 本用例关于rabbitmq的整合提供简单消 ...
- yii中获取当前模块,控制器,方法
在控制器里 $name = $this->getModule()->id; // module $name = $this->getId(); // controller $nam ...
- Linux下多网卡绑定bond及模式介绍
[介绍] 网卡bond一般主要用于网络吞吐量很大,以及对于网络稳定性要求较高的场景. 主要是通过将多个物理网卡绑定到一个逻辑网卡上,实现了本地网卡的冗余,带宽扩容以及负载均衡. Linux下一共有七种 ...
- python爬取拉勾网数据并进行数据可视化
爬取拉勾网关于python职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示,包括柱状图展示.直方图展示.词云展示等并根据可视化的数据做 ...
- 如何使用 Docker 安装 Jenkins
说在前面 本篇内容非常简单,仅讲述了如何快速在 Docker 上部署一个 Jenkins 实例,不涉及其他. 本文实验环境: 操作系统:Centos 7.5 Docker Version:18.09. ...
- 究竟什么是Windows句柄
图解说明——究竟什么是Windows句柄 这里需要说明: 1.这里将句柄所能标识的所有东西(如窗口.文件.画笔等)统称为“对象”. 2.图中一个小横框表示一定大小的内存区域,并不代表一个字节, ...
- H5学习笔记-应用缓存,Web worker,服务器发送事件
↑亮了 应用缓存用法 <!DOCTYPE HTML> <html manifest="demo.appcache"> <body> The co ...
- 作者联系方式D1
欢迎大伙投稿,审核通过免费发布. 奥特曼超人 KARL-Dujinyang QQ: 309933706 QQ: 1875125470 工作时间都会在线. 偶尔博客,不过有问题可以加Q来找我讨论 ...
- 《Graph Neural Networks: A Review of Methods and Applications》阅读笔记
本文是对文献 <Graph Neural Networks: A Review of Methods and Applications> 的内容总结,详细内容请参照原文. 引言 大量的学习 ...
- windows中实现python,redis服务自动重启(任务计划程序+bat脚本)
需求:银行电脑无法自动开机,只能 通过 应用相关服务每天自动重启的方式实现 服务更新并且防止服务假死,内存过大 等情况 相关工具:win10系统中,使用windows自带的任务计划程序 和 bat脚本 ...