CI框架提供了一个叫Benchmark的基准测试类,用于计算两个标记点之间的时间差和当时的内存占用,一般用于开发过程中计算页面加载时间,方法执行时间等中会使用到,便于做性能测试分析代码的执行效率。
使用流程如下:1、标记一个起始点;2、标记一个结束点;3、使用 elapsed_time 函数计算时间差。
$this->benchmark->mark('code_start');
//......
$this->benchmark->mark('code_end');
echo $this->benchmark->elapsed_time('code_start', 'code_end');
基准类的使用方式比较容易理解,实现方式也比较简单,代码分析如下。
CI_Benchmark没有构造函数,主要的属性和方法如下所示,$marker保存了各个时间点的Unix时间戳数据。
mark函数用于在应用中标记一个点,记录其Unix时间戳。
public function mark($name)
{
$this->marker[$name] = microtime(TRUE);
}
}
elapsed_time()也比较容易理解,计算两个标记点的时间差,其中如果$point2不存在则默认为当前时间,$point1不存在返回空字符。
public function elapsed_time($point1 = '', $point2 = '', $decimals = 4)
{
if ($point1 === '')
{
return '{elapsed_time}';
}
if ( ! isset($this->marker[$point1]))
{
return '';
}
if ( ! isset($this->marker[$point2]))
{
$this->marker[$point2] = microtime(TRUE);
}
return number_format($this->marker[$point2] - $this->marker[$point1], $decimals);
}
另外这个函数可以计算并返回当前使用的内存
public function memory_usage()
{
return '{memory_usage}';
}