zoukankan      html  css  js  c++  java
  • ThinkPHP在方法中统计耗时

    ThinkPHP的底层提供了一些有用的系统调试类:ThinkPHPExtendLibraryORGUtilDebug.class.php

    class Debug {
    
        static private $marker =  array();
        /**
         +----------------------------------------------------------
         * 标记调试位
         +----------------------------------------------------------
         * @access public
         +----------------------------------------------------------
         * @param string $name  要标记的位置名称
         +----------------------------------------------------------
         * @return void
         +----------------------------------------------------------
         */
        static public function mark($name) {
            self::$marker['time'][$name]  =  microtime(TRUE);
            if(MEMORY_LIMIT_ON) {
                self::$marker['mem'][$name] = memory_get_usage();
                self::$marker['peak'][$name] = function_exists('memory_get_peak_usage')?memory_get_peak_usage(): self::$marker['mem'][$name];
            }
        }
    
        /**
         +----------------------------------------------------------
         * 区间使用时间查看
         +----------------------------------------------------------
         * @access public
         +----------------------------------------------------------
         * @param string $start  开始标记的名称
         * @param string $end  结束标记的名称
         * @param integer $decimals  时间的小数位
         +----------------------------------------------------------
         * @return integer
         +----------------------------------------------------------
         */
        static public function useTime($start,$end,$decimals = 6) {
            if ( ! isset(self::$marker['time'][$start]))
                return '';
            if ( ! isset(self::$marker['time'][$end]))
                self::$marker['time'][$end] = microtime(TRUE);
            return number_format(self::$marker['time'][$end] - self::$marker['time'][$start], $decimals);
        }
    
        /**
         +----------------------------------------------------------
         * 区间使用内存查看
         +----------------------------------------------------------
         * @access public
         +----------------------------------------------------------
         * @param string $start  开始标记的名称
         * @param string $end  结束标记的名称
         +----------------------------------------------------------
         * @return integer
         +----------------------------------------------------------
         */
        static public function useMemory($start,$end) {
            if(!MEMORY_LIMIT_ON)
                return '';
            if ( ! isset(self::$marker['mem'][$start]))
                return '';
            if ( ! isset(self::$marker['mem'][$end]))
                self::$marker['mem'][$end] = memory_get_usage();
            return number_format((self::$marker['mem'][$end] - self::$marker['mem'][$start])/1024);
        }
    
        /**
         +----------------------------------------------------------
         * 区间使用内存峰值查看
         +----------------------------------------------------------
         * @access public
         +----------------------------------------------------------
         * @param string $start  开始标记的名称
         * @param string $end  结束标记的名称
         +----------------------------------------------------------
         * @return integer
         +----------------------------------------------------------
         */
        static function getMemPeak($start,$end) {
            if(!MEMORY_LIMIT_ON)
                return '';
            if ( ! isset(self::$marker['peak'][$start]))
                return '';
            if ( ! isset(self::$marker['peak'][$end]))
                self::$marker['peak'][$end] = function_exists('memory_get_peak_usage')?memory_get_peak_usage(): memory_get_usage();
            return number_format(max(self::$marker['peak'][$start],self::$marker['peak'][$end])/1024);
        }
    }
    

     使用时可以在需要统计耗时的方法中这么用:

    Debug::mark('getBatchTbGoods_start');//标记计时开始
    $goodResults = JavaApi::getBatchTbGoods($goodIds);
    Debug::mark('getBatchTbGoods_end');//标记计时结束
    performance_log(MODULE_NAME, ACTION_NAME, 'getBatchTbGoods', null, $this->_uid, 1, array('start' => 'getBatchTbGoods_start', 'end' => 'getBatchTbGoods_end'));//写入Log
    

     写入Log的方法是这样的:

    function performance_log($module, $action, $function, $subFunction, $userId, $order, $debugTime = array(), $section = false) {
    	if (!$module || !$action || !$function || !$userId) {
    		return false;
    	}
    
    	$isWrite = C(strtoupper($module) . '_' . strtoupper($action) . "_WRITE_LOG");   // 导入淘宝页写日志'TAOBAO_TBCOLLECTION_WRITE_LOG' => true,在配置文件中设置
    	if ($isWrite && $debugTime) {
    		$time = Debug::useTime($debugTime['start'], $debugTime['end']);
    		$tn = $section ? "	
    "  : '';
    		$logText = array("PERFORMANCE_LOG", $module, $action, $function, $subFunction, $userId, getClientIp(), $order, $time, microtime(true) . $tn);
    		Log::write(join(',', $logText), Log::INFO);
    	}
    }
    
  • 相关阅读:
    CCCC 2020 酱油记
    CCPC 2020 威海 滚粗记
    IEEExtreme 2020 酱油记
    CCSP 2020 酱油记
    ICPC 陕西省赛 2020 游记
    CCPC 网络赛 2020 自闭记
    CSP 第20次认证 酱油记
    CSP-S 2019 酱油记
    NOI2019 退役记
    树链剖分入门
  • 原文地址:https://www.cnblogs.com/Hebe/p/3228226.html
Copyright © 2011-2022 走看看