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 是微秒部分。字符串的两部分都是以秒为单位返回的。

  • 相关阅读:
    python3.8安装flask出现错误“ModuleNotFoundError: No module named '_ctypes'”
    利用virtualenvwrapper创建虚拟环境出现错误“/usr/bin/python: No module named virtualenvwrapper”
    CentOS7 下升级Python版本
    Python 定义动态变量
    Linux常用命令
    项目经验之:项目用到LinQ (总结)
    ListBox操作一些总结
    项目经验之:如CSDN一样的分页,我能否做这样的分页吗??????
    记上一笔,listbox展示项中,隐藏其中一项
    项目经验之:SQL一些简单问题中可以使用的技巧
  • 原文地址:https://www.cnblogs.com/whoamme/p/3345643.html
Copyright © 2011-2022 走看看