我们在项目调优过程中,通常会对代码的运行时间进行统计,以便了解程序运行的性能和效率,这些统计结果将作为代码优化时的重要指标,帮助开发者有针对性的进行调优工作。
MiniFramework 在 1.3.0 版本中,新增了 Debug 类,其中包含有时间统计功能的若干方法,可以非常便捷地帮助开发者实现上述统计需求,下面我们来通过示例代码介绍具体实现方法。
首先,假设我们有一个名为 Index 的 Controller,并且其中包含有一个名为 index 的 Action(MiniFramework下载包中已经包含),我们将代码写在这个 Action 中,如下:
<?php
namespace App\Controller;
use Mini\Action;
use Mini\Debug; //用use引入Debug类
class Index extends Action
{
function indexAction()
{
// 计时开始
Debug::timerStart();
sleep(1); //用sleep模拟代码运行1秒钟
// 纪录中间计时点
Debug::timerPoint();
sleep(1);
// 再次纪录中间计时点
Debug::timerPoint();
sleep(1);
// 计时结束
Debug::timerEnd();
// 获取计时统计结果
// 参数为 true 时,这个方法会调用 dump 将结果直接输出
Debug::getTimerRecords(true);
die();
}
}
上述的代码中,首先在顶部通过 use 指令引入 Debug 类,由于 Debug 类是归属于 MiniFramework 框架的,因此引入时要在类名前加上命名空间 Mini。
在 Action 中,我们用到了四个方法,分别为: Debug::timerStart,用于开启计时器 Debug::timerPoint,用于在计时开始和结束之间记录若干个中间计时点 Debug::timerEnd,用于结束当前计时器 Debug::getTimerRecords,用于获得计时结果
在代码中,我们通过 sleep 来模拟代码执行的时间,便于演示计时器的工作过程。
代码保存并运行后,会看到类似下边的结果:
array(2) {
["time"] => string(12) "3,002.6779ms"
["point"] => array(2) {
[0] => string(12) "1,000.5419ms"
[1] => string(12) "2,001.5941ms"
}
}
上述结果中,time 对应的是本次统计的总时长。point 对应的是中间计时点,值为一个数组,数组中从0开始的每一个元素对应每次调用 Debug::timerPoint 方法时记录的运行时间。
最后,我们注意到调用 Debug::getTimerRecords 方法时,我们传入了一个 true,作用是让这个方法调用 dump 直接输出统计结果。当然,开发者也可以将结果赋值给一个变量,例如:
$timerResult = Debug::getTimerRecords();
MiniFramework 是一款遵循 Apache2 开源协议发布的,支持 MVC 和 RESTful 的超轻量级 PHP 开发框架。旨在帮助开发者用最小的学习成本快速构建 Web 应用,在满足分层开发、数据库和缓存访问等少量功能基础上,做到尽可能精简,助力应用基于框架高效运行。
MiniFramework 的 GitHub 地址:https://github.com/jasonweicn/MiniFramework