欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

CI框架源码阅读---------基准测试类Benchmark.php

程序员文章站 2022-04-10 22:50:01
...
[php]

/**

* CodeIgniter

*

* An open source application development framework for PHP 5.1.6 or newer

*

* @package CodeIgniter

* @author ExpressionEngine Dev Team

* @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.

* @license http://codeigniter.com/user_guide/license.html

* @link http://codeigniter.com

* @since Version 1.0

* @filesource

*/

// ------------------------------------------------------------------------

/**

* CodeIgniter Benchmark Class

*

* This class enables 能够 you to mark points and calculate 计算 the time difference 差异

* between them. Memory consumption can also be displayed.

*

* @package CodeIgniter

* @subpackage Libraries

* @category Libraries

* @author ExpressionEngine Dev Team

* @link http://codeigniter.com/user_guide/libraries/benchmark.html

*/

class CI_Benchmark {

/**

* List of all benchmark markers and when they were added

* 用来存储基准测试类标记的数组

* @var array

*/

var $marker = array();

// --------------------------------------------------------------------

/**

* Set a benchmark marker

* 设置一个标记点

* Multiple calls to this function can be made so that several

* execution points can be timed

*

* @access public

* @param string $name name of the marker

* @return void

*/

function mark($name)

{

// 在程序的任意地方调用方法时,会记录当前的时间点。

$this->marker[$name] = microtime();

}

// --------------------------------------------------------------------

/**

* Calculates the time difference between two marked points.

* 计算出两个时间点之间的时间。

* If the first parameter is empty this function instead returns the

* {elapsed_time} pseudo-variable 虚假变量. This permits 许可 the full system

* execution time to be shown in a template. The output class will

* swap the real value for this variable.

*

* @access public

* @param string a particular marked point

* @param string a particular marked point

* @param integer the number of decimal places

* @return mixed

*/

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

{

/*

* 如果没有给出明确的时间点,那么会计算出整个程序运行的时间。

* 怎么可以做到计算出整个程序的运行时间的呢?其实执行此计算的是Output组件。

* 而调用Benchmark::elapsed_time();(无参数)的时候,实质上先返回的并不是

* 整个程序运行的时间,也不可能做到,实质返回的是一个{elapsed_time}标签,然后

* Output在处理输出的时候,再计算出整个程序运行时间,因为处理输出阶段程序可以视

* 为处于最后阶段,于是可以近似计算出总时间,然后把输出中的{elapsed_time}替换掉。

* 下面的memory_usage()原理相同。

*/

if ($point1 == '')

{

return '{elapsed_time}';

}

if ( ! isset($this->marker[$point1]))

{

return '';

}

if ( ! isset($this->marker[$point2]))

{

$this->marker[$point2] = microtime();

}

//这里为什么要用到list,是因为microtime();返回值是“msec sec”的格式。

list($sm, $ss) = explode(' ', $this->marker[$point1]);

list($em, $es) = explode(' ', $this->marker[$point2]);

return number_format(($em + $es) - ($sm + $ss), $decimals);

}

// --------------------------------------------------------------------

/**

* Memory Usage

*

* This function returns the {memory_usage} pseudo-variable.

* This permits it to be put it anywhere in a template

* without the memory being calculated until the end.

* The output class will swap the real value for this variable.

* www.2cto.com

* @access public

* @return string

*/

function memory_usage()

{

return '{memory_usage}';

}

}

// END CI_Benchmark class

/* End of file Benchmark.php */

/* Location: ./system/core/Benchmark.php */