zoukankan      html  css  js  c++  java
  • 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)
        {
            if ($point1 == '')
            {
                return '{elapsed_time}';
            }
    
            if ( ! isset($this->marker[$point1]))
            {
                return '';
            }
    
            if ( ! isset($this->marker[$point2]))
            {
                $this->marker[$point2] = microtime();
            }
    
            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 */

    看了下源码,主要通过elapsed_time()函数计算二个时间点的时间间隔;通过

    list($sm, $ss) = explode(' ', $this->marker[$point1]);
    list($em, $es) = explode(' ', $this->marker[$point2]);
    return number_format(($em + $es) - ($sm + $ss), $decimals);

    方式返回时间间隔。

    备注microtime() 当前 Unix 时间戳以及微秒数。本函数以 "msec sec" 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。

  • 相关阅读:
    解决证书过期而无法连接到或启动HyperV虚拟机的问题
    Hyperv相关补丁(错误号87 Virtual Machine Management服务无法启动)
    Formula One Report学习总结
    漂亮的Form皮肤
    FarPoint Design BorderEditor(边框设计)
    保存图片到SQL Server
    发布一个的Web日期选择控件及源码(其中的js代码来自于Microsoft CRM)
    自谈音乐之道
    SQL Server 存储过程的分页
    教你9招最有效防电脑辐射方法
  • 原文地址:https://www.cnblogs.com/whoamme/p/3345643.html
Copyright © 2011-2022 走看看