基准测试类是系统自动加载的,无需用户手动加载。

先贴上代码精简版的Benchmark类

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class CI_Benchmark {

    public $marker = array();
    public function mark($name)
    {
        $this->marker[$name] = microtime(TRUE);
    }

    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}';
    }
 
}

整个类比较简单,有一个$marker变量,三个函数,分别来看一下。

marker变量

存储所有的benchmark点的信息。

mark($name)

这个函数只是简单的调用了microtime函数,并把基准点的名称存入了marker数组中。

elapsed_time($point1 = '', $point2 = '', $decimals = 4)

这个函数是计算两个基准点直接的时间差,接受三个参数。
有个注意点是当$point1为空的时候直接返回了一个字符串,这个字符串其实在后面的输出时被替换成了其他的东西,暂时不管。

memory_usage()

同上,只是返回了一个字符串,也是在后面输出时被替换掉了。