ThinkPHP在方法中统计耗时

ThinkPHP的底层提供了一些有用的系统调试类:ThinkPHP\Extend\Library\ORG\Util\Debug.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 ? "\t\n"  : '';
		$logText = array("PERFORMANCE_LOG", $module, $action, $function, $subFunction, $userId, getClientIp(), $order, $time, microtime(true) . $tn);
		Log::write(join(',', $logText), Log::INFO);
	}
}

 

posted @ 2013-07-31 17:06  水月灵心  阅读(1241)  评论(0编辑  收藏  举报