Thinkphp5.1 使用Xhprof分析性能实践

264 阅读1分钟

Thinkphp5.1 使用Xhprof分析性能实践

上一篇文章《xhprof安装与使用 【window php7.3】》 ,详细讲解了如何安装与使用xhprof,这一篇将学习将xhprof整合到已有的项目中去,这里以Thinkphp5.1框架为例。

配置性能分析的行为

在application/tags.php文件中,定义性能分析的行为,分别绑定在app_init 应用初始化、app_end应用结束的钩子上:

文件:application/tags.php

<?php
 // 应用行为扩展定义文件
return [
    // 应用初始化
    'app_init'     => [
        'app\\common\\behavior\\XhprofEnable',
    ],
    // 应用开始
    'app_begin'    => [],
    // 模块初始化
    'module_init'  => [],
    // 操作开始执行
    'action_begin' => [],
    // 视图内容过滤
    'view_filter'  => [],
    // 日志写入
    'log_write'    => [],
    // 应用结束
    'app_end'      => [
        'app\\common\\behavior\\XhprofDisable',
    ],
];


创建性能分析开始行为:
文件: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);
        }
    }
}

创建性能分析结束行为:

文件: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;
        }
    }
}

配置参数控制化

在配置文件config/app.php中添加控制配置参数


    'xhprof'=>[
        'enable'=>true, //开启分析
        'name'=>'mysite',//多项目用
        'domain'=>'http://www.testpf.com' //性能分析结果展示的域名,前面配置过的站点
    ]

xhprof_lib文件引入

将下载好demo代码内的 xhprof_lib文件夹拷贝到项目的extend目录下

image.png

执行需要被分析的接口

正常运行我们的接口:加参数DEBUG_PROFILE=1
www.tp51.com/index/index…

文件: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';
    }


}

运行结果:

image.png

查看性能分析报告

直接点击查看分析结果,或者直接访问自己已经部署好的分析项目。查看性能报告

image.png

查看性能报告

image.png

点击 [View Full Callgraph] 查看调用链

image.png

若有收获,就点个赞吧