ThinkPHP中的行为是一个比较抽象的概念,你可以把行为想象成在应用执行过程中的一个动作。
不熟悉的xhprof
的,请参考前一篇文章:http://www.tech1024.com/original/2990.html
如果你还不了解thinkphp的钩子
和行为
,可以参考手册:https://www.kancloud.cn/manual/thinkphp5_1/354129
首先,我们在application/tags.php
文件中,定义性能分析的行为,分别绑定在app_init
、app_init
App初始化标和应用结束的钩子上:
return [
// 应用初始化
'app_init' => [
'app\\common\\behavior\\XhprofEnable',
],
// ...省略其他代码
// 应用结束
'app_end' => [
'app\\common\\behavior\\XhprofDisable',
],
// ...省略其他代码
];
创建开始分析行为:
application/common/behavior/XhprofStart.php
<?php
namespace app\common\behavior;
/**
* 开始性能分析
*/
class XhprofStart
{
public function run($params)
{
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
}
}
创建性能分析结束行为:
application/common/behavior/XhprofEnd.php
<?php
namespace app\common\behavior;
/**
* 结束性能分析
*/
class XhprofEnd
{
public function run($params)
{
$xhprof_data = xhprof_disable();
// display raw xhprof data for the profiler run
// print_r($xhprof_data);
// 这里是xhprof的目录 !!!
$XHPROF_ROOT = realpath(dirname(env('APP_PATH')) . '/../xhprof');
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
// save raw data for this profiler run using default
// implementation of iXHProfRuns.
$xhprof_runs = new \XHProfRuns_Default();
// save the run under a namespace "xhprof_foo"
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
echo '<a href="http://127.0.0.1/xhprof_html/index.php?run=' . $run_id . '&source=xhprof_foo" target="_blank">查看</a>';
}
}
这样,项目里所有请求都会产生一个性能分析文件,可以通过http://您的域名/xhprof/xhprof_html/index.php 查看。