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

来源:互联网 发布:linux nc 发送udp命令 编辑:程序博客网 时间:2024/05/16 09:04
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');/** * CodeIgniter * * An open source application development framework for PHP 5.1.6 or newer * * @packageCodeIgniter * @authorExpressionEngine Dev Team * @copyrightCopyright (c) 2008 - 2011, EllisLab, Inc. * @licensehttp://codeigniter.com/user_guide/license.html * @linkhttp://codeigniter.com * @sinceVersion 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. * * @packageCodeIgniter * @subpackageLibraries * @categoryLibraries * @authorExpressionEngine Dev Team * @linkhttp://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 * * @accesspublic * @paramstring$namename of the marker * @returnvoid */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. * * @accesspublic * @paramstringa particular marked point * @paramstringa particular marked point * @paramintegerthe number of decimal places * @returnmixed */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. * * @accesspublic * @returnstring */function memory_usage(){return '{memory_usage}';}}// END CI_Benchmark class/* End of file Benchmark.php *//* Location: ./system/core/Benchmark.php */

原创粉丝点击