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

WBOY
发布: 2016-06-13 12:53:06
原创
861 人浏览过

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

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * 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.
	 *
	 * @access	public
	 * @return	string
	 */
	function memory_usage()
	{
		return '{memory_usage}';
	}

}

// END CI_Benchmark class

/* End of file Benchmark.php */
/* Location: ./system/core/Benchmark.php */
登录后复制

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板