Home  >  Article  >  Backend Development  >  PHP记录代码运行时间

PHP记录代码运行时间

WBOY
WBOYOriginal
2016-06-20 12:26:011329browse

代码运行时间测量

一般在要求性能的代码中, 会加入测试代码进行计算。

不过每次都要写microtime, end – start 未必太麻烦了, 所以简单的写了一个类去搞。

代码

class TimeCost{    private $cost = array();    private $record = array();    private $scale = 6;    public function __construct($scale = 6)    {        $this->cost = array();        $this->record = array();        $this->scale = $scale;    }    public function __toString()    {        return  $this->getString();    }    /**     * start to cal time.     *     * @param mixed $key     */    public function addCost($key)    {        $this->cost[$key] = microtime(true);    }    /**     * stop to cal time.     *     * @param mixed $key     */    public function closeCost($key)    {        $cost  = bcsub(microtime(true), $this->cost[$key], $this->scale);        if (in_array($key, array_keys($this->record))) {            $this->record[$key] = bcadd($cost, $this->record[$key], $this->scale);        } else {            $this->record[$key] = $cost;        }        return  $cost;    }        public function getString($key = null)    {        if ($key) {            return  "{$key}[{$this->record[$key]}]";        }        $str = '';        foreach ($this->record as $k => $v) {            $str .= "{$k}[{$v}]";        }        return  $str;    }}

用法

$obj = new TimeCost();$token = 'test_a';$obj->addCost($token);some_code();$obj->closeCost($token);$reslut = $obj->getString($token);

说明

  • 时间精度: 默认是保留了6位, 已经足够了, 想要更高精度, 可以在new对象的时候指定$scale参数

  • token: token是为了表示某段代码, 对应的结果会以key(token), value的形式写入到record数组中。

    所以用一个token多次进行addCost和closeClost的结果会进行累积。

  • getString: 传递token则返回token对应的结果, 默认会将record中的所有结果拼接返回。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn