ThinkPHP3.2 G函數代碼及 使用方法


ThinkPHP3.2 G函數代碼及 使用方法

代碼:

// 內存是否可調用
define('MEMORY_LIMIT_ON',function_exists('memory_get_usage'));

/**
 * 記錄和統計時間(微秒)和內存使用情況
 * 使用方法:
 * <code>
 * G('begin'); // 記錄開始標記位
 * // ... 區間運行代碼
 * G('end'); // 記錄結束標簽位
 * echo G('begin','end',6); // 統計區間運行時間 精確到小數后6位
 * echo G('begin','end','m'); // 統計區間內存使用情況
 * 如果end標記位沒有定義,則會自動以當前作為標記位
 * 其中統計內存使用需要 MEMORY_LIMIT_ON 常量為true才有效
 * </code>
 * @param string $start 開始標簽
 * @param string $end 結束標簽
 * @param integer|string $dec 小數位或者m
 * @return mixed
 */
function G($start,$end='',$dec=4) {
    static $_info       =   array();
    static $_mem        =   array();
    if(is_float($end)) { // 記錄時間
        $_info[$start]  =   $end;
    }elseif(!empty($end)){ // 統計時間和內存使用
        if(!isset($_info[$end])) $_info[$end]       =  microtime(TRUE);
        if(MEMORY_LIMIT_ON && $dec=='m'){
            if(!isset($_mem[$end])) $_mem[$end]     =  memory_get_usage();
            return number_format(($_mem[$end]-$_mem[$start])/1024);
        }else{
            return number_format(($_info[$end]-$_info[$start]),$dec);
        }

    }else{ // 記錄時間和內存使用
        $_info[$start]  =  microtime(TRUE);
        if(MEMORY_LIMIT_ON) $_mem[$start]           =  memory_get_usage();
    }
    return null;
}

//blogurl:http://www.cnblogs.com/osfipin/

  解說:

開發過程中,有些時候為了測試性能,經常需要調試某段代碼的運行時間或者內存占用開銷,系統提供了G方法可以很方便的獲取某個區間的運行時間和內存占用情況。 例如:

  1. G('begin');
  2. // ...其他代碼段
  3. G('end');
  4. // ...也許這里還有其他代碼
  5. // 進行統計區間
  6. echo G('begin','end').'s';

G('begin','end') 表示統計begin位置到end位置的執行時間(單位是秒),begin必須是一個已經標記過的位置,如果這個時候end位置還沒被標記過,則會自動把當前位置標記為end標簽,輸出的結果類似於:0.0056s

默認的統計精度是小數點后4位,如果覺得這個統計精度不夠,還可以設置例如:

  1. G('begin','end',6).'s';

可能的輸出會變成:0.005587s

如果你的環境支持內存占用統計的話,還可以使用G方法進行區間內存開銷統計(單位為kb),例如:

  1. echo G('begin','end','m').'kb';

第三個參數使用m表示進行內存開銷統計,輸出的結果可能是:625kb

同樣,如果end標簽沒有被標記的話,會自動把當前位置先標記位end標簽。

如果環境不支持內存統計,則該參數無效,仍然會進行區間運行時間統計。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM