在动态Web开发的世界中,优化应用程序的性能是至关重要的。为了深入了解和改善PHP程序的性能表现,开发者们经常依赖于性能分析器。在这些工具中,PHP层次式性能分析器(XHProf)以其轻量级和高效的特点脱颖而出。
一、简介
XHProf 是一款轻量级的性能分析工具,专门设计用于进行分层性能测量和分析。在其数据收集阶段,XHProf 能够详细追踪函数调用的次数和性能指标,同时能够生成展示程序运行时行为的程序动态调用关系图(调用弧线图)。在分析完成后的报告和后期处理阶段,XHProf 会计算关键的性能指标,包括执行时间、CPU 使用时间和内存消耗等独占性能度量。
XHProf 提供了灵活的函数性能报告功能,这些报告可以根据需要从调用者或被调用者的角度来终止。为了有效检测递归函数并防止在调用图中出现无限循环的情况,XHProf 在数据收集时通过循环遍历调用图,并为每次递归调用分配一个唯一的深度标识符。这样,即使是在复杂的递归场景中,XHProf 也能够确保准确且一致的性能数据采集。
XHProf 包含了一个基于 HTML 的简单用户界面(由 PHP 写成)。 基于浏览器的用户界面使得浏览、分享性能数据结果更加简单方便。 同时也支持查看调用图。
XHProf 的报告对理解代码执行结构常常很有帮助。 比如此分层报告可用于确定在哪个调用链里调用了某个函数。
XHProf 对两次运行进行比较(又名 “diff” 报告),或者多次运行数据的合计。 对比、合并报告,很像针对单次运行的“平式视图”性能报告,就像“分层式视图”的性能报告。
二、配置
1、要求
虽然并非必须,但 XHProf 配备了一个由 PHP 编写的用户界面,这大大增强了其实用性。这个界面不仅便于存储分析数据,而且可以在网页浏览器中直观地展示这些数据。因此,在启用了 PHP 的 Web 服务器上使用 XHProf,可以让用户更加便捷地利用其功能,充分体验到性能分析的便利和优势。
2、运行时配置
xhprof.output_dir string:储存 XHProf 运行数据的默认目录,用于接口 iXHProfRuns(即XHProfRuns_Default 类)。
三、预定义常量
下列常量由此扩展定义,且仅在此扩展编译入 PHP 或在运行时动态载入时可用。
- XHPROF_FLAGS_NO_BUILTINS (int):使得跳过所有内置(内部)函数;
- XHPROF_FLAGS_CPU (int):使输出的性能数据中添加 CPU 数据;
- XHPROF_FLAGS_MEMORY (int):使输出的性能数据中添加内存数据。
四、示例
本示例启动并结束性能分析器,然后使用捆绑的用户界面来保存和解析结果。 换言之,扩展的代码在调用 xhprof_disable() 函数后结束。
Xhprof 范例,可选使用图形界面:
<?php xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); for ($i = 0; $i <= 1000; $i++) { $a = $i * $i; } $xhprof_data = xhprof_disable(); $XHPROF_ROOT = "/tools/xhprof/"; include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php"; include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing"); echo "http://localhost/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing\n"; ?>
以上示例的输出类似于:
http://localhost/xhprof/xhprof_html/index.php?run=t11_4bdf44d21121f&source=xhprof_testing
五、Xhprof函数
- xhprof_disable — 停止 xhprof 分析器;
- xhprof_enable — 启动 xhprof 性能分析器;
- xhprof_sample_disable — 停止 xhprof 性能采样分析器;
- xhprof_sample_enable — 以采样模式启动 XHProf 性能分析。