在开发高性能的 Web 应用时,性能分析是一个不可或缺的环节。ThinkPHP 作为一个流行的 PHP 框架,提供了丰富的功能和良好的扩展性。那么如何在 ThinkPHP 项目中使用 Xhprof 工具进行性能分析呢?请查看本文,将会帮助你识别你thinkphp程序的性能瓶颈并进行优化。
如何安装Xhprof
查看:如何在Windows上安装PHP性能检测工具XHProf
1.配置性能分析的行为
首先,在 application/tags.php 文件中,定义性能分析的行为,并将其绑定到应用的生命周期钩子上,即:分别绑定在app_init 应用初始化、app_end应用结束的钩子上,以下是配置的示例:
<?php // 应用行为扩展定义文件 return [ // 应用初始化 'app_init' => [ 'app\\common\\behavior\\XhprofEnable', ], // 应用开始 'app_begin' => [], // 模块初始化 'module_init' => [], // 操作开始执行 'action_begin' => [], // 视图内容过滤 'view_filter' => [], // 日志写入 'log_write' => [], // 应用结束 'app_end' => [ 'app\\common\\behavior\\XhprofDisable', ], ];
2.配置参数控制化
在 config/app.php 配置文件中添加 Xhprof 的控制参数:
// config/app.php 'xhprof' => [ 'enable' => true, // 开启性能分析 'name' => 'mysite', // 项目名称,用于区分多个项目 'domain' => 'http://www.testpf.com', // 性能分析结果展示的域名 ],
3.创建性能分析行为
接下来,创建性能分析的开始和结束行为类。这些类将在应用初始化和结束时分别触发。
开始:XhprofEnable.php
路径:application/common/behavior/XhprofEnable.php
<?php namespace app\common\behavior; use think\facade\Env; class XhprofEnable { public function run() { //控制是否开启分析(生成环境也可以做概率性捕获分析) if(config('xhprof')['enable'] && input('DEBUG_PROFILE') && extension_loaded('xhprof') ) { //这里需要注意的是将xhprof_lib文件夹拷贝到网站的能访问到的目录,我这里是放在了项目的extend目录下 require_once Env::get('root_path') . 'extend/'.'xhprof_lib/utils/xhprof_lib.php'; require_once Env::get('root_path') . 'extend/'.'xhprof_lib/utils/xhprof_runs.php'; xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY); } } }
结束:XhprofDisable.php
路径:application/common/behavior/XhprofDisable.php
<?php namespace app\common\behavior; class XhprofDisable { public function run() { if(config('xhprof')['enable'] && input('DEBUG_PROFILE') && extension_loaded('xhprof') ) { $ns = config('xhprof')['name'] ?: 'myxhprof'; $xhprofData = xhprof_disable(); $xhprofRuns = new \XHProfRuns_Default(); $runId = $xhprofRuns->save_run($xhprofData, $ns); //性能分析结果展示的域名地址 $url = config('xhprof')['domain'].'/xhprof_html/index.php'; $url .= '?run=%s&source=%s'; $url = sprintf($url, $runId, $ns); echo '<a href="'.$url.'" target="_blank">查看分析结果</a>'; exit; } } }
4.xhprof_lib 文件引入
将 Xhprof 的库文件 xhprof_lib 拷贝到项目的 extend 目录下,确保路径正确无误。
5.执行需要被分析的接口
在运行接口或者网页的是否,通过添加 DEBUG_PROFILE=1 参数来启动性能分析:
示例如下
https://www.toymoban.com/index/index/wswtest?DEBUG_PROFILE=1
文件:application/index/controller/Index.php,测试文件代码:
<?php namespace app\index\controller; use think\Controller; class Index extends Controller { public function wswtest(){ return $this->handleData(); } public function handleData(){ sleep(5); $this->haha(); return 'ss'; } public function haha(){ sleep(2); return 'ss'; } }
运行结果
6.查看性能分析报告
完成性能分析后,可以通过点击生成的链接或直接访问部署好的分析项目来查看性能报告。报告中可以查看调用链和详细的性能数据。
查看性能报告
文章来源:https://www.toymoban.com/diary/php/752.html
点击 [View Full Callgraph] 查看调用链
文章来源地址https://www.toymoban.com/diary/php/752.html
到此这篇关于Thinkphph或php如何使用Xhprof对程序进行性能分析的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!