背景:在日常开发中除了要让功能正常使用外,性能也是非常重要的,在java项目中可以使用 代码优化检测器(arthas-boot.jar ) 来进行接口或代码性的能分析 非常简单方便且体验较好,但在php中就会麻烦一些了,我找了一些资料主要靠谱的分两种方式如下:
1.使用xdebug 大致思路安装xdebug后 配置php.ini 中xdebug.model调整为profile及生成文件路径等参数后 带着指定query参数请求会生成配置文件,还要下载专门的查看工具 Installation · jokkedk/webgrind 这个我无论如何都没成功生成报告文件,后面有空在尝试
2.使用 xhprof 进行分析:
②配置:下载后在本地安装 之后在php.ini配置
zend_extension:指向点击下载dll下载的php_xhprof.dll文件
xhprof.output_dir:指向 xhprof 下载的项目根目录
[xhprof]
extension=php_xhprof.dll
zend_extension="D:\application\work_application\wamp\bin\php\php7.4.33\ext\php_xhprof.dll"
xhprof.output_dir="D:\application\work_application\wamp\www\debug\xhprof"
在本地搭建虚拟域名(我的是wamp+修改host)指向 xhprof 项目根目录 我这里设置的本地域名是 http://xhprof.com/
③引入自己项目
一开始想用composer引用,后来没找到合适的包,改成手动引用并增加命名空间,我用的wordpress别的项目也类似,下面是具体使用代码 :
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS +
XHPROF_FLAGS_CPU +
XHPROF_FLAGS_MEMORY);
#自定义代码
$res=UserService::getAll();
$xhprof_data = xhprof_disable();
include_once MARKETING_SITE_ASSETS_EXTENDS . "xhprof_lib/utils/xhprof_lib.php";
include_once MARKETING_SITE_ASSETS_EXTENDS . "xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
//红色部分是自己配置的虚拟域名
echo "---------------\n".
"Assuming you have set up the http based UI for \n".
"XHProf at some address, you can view run at \n".
"http://xhprof.com/index.php?run=$run_id&source=xhprof_foo\n".
"---------------\n";
中间的
$res=UserService::getAll();
可以替换成其他想查看性能的代码
include_once MARKETING_SITE_ASSETS_EXTENDS . "xhprof_lib/utils/xhprof_lib.php";
include_once MARKETING_SITE_ASSETS_EXTENDS . "xhprof_lib/utils/xhprof_runs.php";
上面自己设置路径能访问到即可,注意文件内要自己加命名空间,否则报not fount Class error
④访问该方法->生成报告文件->通过上面自定义的本地虚拟域名http://xhprof.com/ 访问->查看报告
1)访问该方法,方法返回如下:
复制上图中地址并访问即可看到报告
点击[View Full Callgraph]即可看到视图版本
可以看到其中红色的部分就是主要性能瓶颈,针对修改即可
⑤可能遇到的问题
1)windows点击查看视图可能会报失败dot相关错误,这是本地没安装python的画图包
参考这个文章 windows下Graphviz安装及入门教程
安装后本地环境变量path
D:\application\work_application\Graphviz\bin
即可
近期评论