亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

CI框架源碼閱讀筆記5基準測試BenchMark.php

2020-03-22 17:57:03
字體:
來源:轉載
供稿:網友
  • 上一篇博客(CI框架源碼閱讀筆記4 引導文件CodeIgniter.php)中,我們已經看到:CI中核心流程的核心功能都是由不同的組件來完成的。這些組件類似于一個一個單獨的模塊,不同的模塊完成不同的功能,各模塊之間可以相互調用,共同構成了CI的核心骨架。

    從本篇開始,將進一步去分析各組件的實現細節,深入CI核心的黑盒內部(研究之后,其實就應該是白盒了,僅僅對于應用來說,它應該算是黑盒),從而更好的去認識、把握這個框架。

    按照慣例,在開始之前,我們貼上CI中不完全的核心組件圖:

      由于BenchMark是CI中第一個加載的core組件,因此我們的分析首先從該組件開始。BenchMark的含義非常明確,使用過BenchMark工具的同學應該比較清楚,這是一個基準組件。既然是BenchMark,我們便可大膽猜想,BM組件的主要功能就是記錄程序的運行時間、內存使用、cpu使用等情況。

    先看類圖:

    這個組件結構較簡單,只有一個marker內部變量和三個對外的接口:

    1 Elapsed_time2 Mark3 Memory_usage

    下面一個個展開來看:

    1.  mark

    函數的簽名為:

    function mark($name)

    這個函數接受一個string類型的參數,而實現更簡單,只有一句話:

    $this->marker[$name] = microtime();

    也就是說這個函數只是用于記錄函數調用時刻的時間點。

    值得注意的是,由于Controller中的特殊處理(之后我們會詳細解釋),你的html' target='_blank'>應用程序控制器中可以使用$this->benchmark->mark($name);的方式來添加運行的時間點,例如:

    $this->benchmark->mark("function_test_start");$this->_test();$this->benchmark->mark("function_test_end");print_r($this->benchmark);

    其中,function_test_start和function_test_end分別用于記錄函數調用開始和結束的時間點

    打印出的結果:

    現在要計算函數的調用時間,需要用到BenchMark組件的第二個函數elapsed_time

    2.  elapsed_time

    函數的簽名為:

    function elapsed_time($point1 = '', $point2 = '', $decimals = 4)

    3個參數均為可選參數

    (1). 如果$point1 為空,則返回’{elapsed_time}’

    if ($point1 == '') {     return '{elapsed_time}';}

    納尼!明明應該返回的是時間,怎么反而返回的是字符串,而且這么奇怪(類似smarty的標簽)。其實,在Output組件中,{elapsed_time}會被替換,我們暫時看一下替換的方式:

    $elapsed = $BM->elapsed_time('total_execution_time_start', 'total_execution_time_end');$output = str_replace('{elapsed_time}', $elapsed, $output);

    也就是說,沒有指定參數的情況下,調用該函數實際得到的是total_execution_time_start這個時間點到total_execution_time_end這個時間點的時間差。更進一步,由于total_execution_time_start是在BM加載之后設置的第一個mark點(total_execution_time_end并未定義,返回的是當前時間點),該函數返回的實際就是系統的加載和運行時間。

    (2).如果調用的是未知的mark點。則結果是未知的,直接返回空:

    if ( ! isset($this->marker[$point1])){    return '';}

    (3).如果沒有設置$point2的mark點,則將$point2的mark點設置為當前的時間點。

    if ( ! isset($this->marker[$point2])){    $this->marker[$point2] = microtime();}

    (4).最后返回的兩個mark點的時間差:

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

    還看之前的例子,這里我們可以通過調用:

    echo $this->benchmark->elapsed_time("function_test_start","function_test_end");

    得到函數的執行時間.

    3.  memory_usage

    這個函數返回的是系統的內存使用情況(MB單位),與{elapsed_time} 一樣,這個函數返回的{memory_usage}也會在Output中被替換:

    $memory  = ( ! function_exists('memory_get_usage')) ? '0' : round(memory_get_usage()/1024/1024, 2).'MB';$output = str_replace('{memory_usage}', $memory, $output);

    由于BenchMark組件本身較簡單,我們不做更多的解釋。

    最后,貼上這個組件的源碼:

    復制代碼
    <?phpclass CI_Benchmark {    /**     * List of all benchmark markers and when they were added     *     * @var array     */    var $marker = array();    /**     * Set a benchmark marker     *     * @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     * @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.     */    function memory_usage()    {        return '{memory_usage}';    }}
    PHP編程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品一香蕉国产线看观看| 中文字幕视频在线免费欧美日韩综合在线看| 国产免费一区二区三区在线观看| 69av在线视频| 性日韩欧美在线视频| 亚洲伦理中文字幕| 久久精品成人欧美大片古装| 黑人与娇小精品av专区| 黑丝美女久久久| 国产精欧美一区二区三区| 日本人成精品视频在线| 福利视频导航一区| 亚洲精品一区在线观看香蕉| 一区二区欧美在线| 亚洲精品女av网站| 国产精品免费网站| 亚洲aa中文字幕| 91久久精品国产91久久性色| 91在线视频一区| 欧美一性一乱一交一视频| 国产一区二区成人| 久久免费观看视频| 国产精品久久国产精品99gif| 91精品国产高清久久久久久| 精品国产乱码久久久久久婷婷| 亚洲在线观看视频| 中文字幕精品www乱入免费视频| 精品国产一区二区三区久久久狼| 欧美大尺度电影在线观看| 日韩av免费在线| 国产精品美女av| 亚洲美腿欧美激情另类| 亚洲永久在线观看| 久久精品国产v日韩v亚洲| 国内精久久久久久久久久人| 在线日韩精品视频| 色综合老司机第九色激情| 欧美一级在线播放| 欧美亚洲一级片| 久久久噜久噜久久综合| 日韩在线观看免费| 日韩成人av一区| 久久久久久高潮国产精品视| 国产91在线播放精品91| 亚洲成av人影院在线观看| 日日骚久久av| 成人在线国产精品| 亚洲成人网在线观看| 久久精品91久久久久久再现| 日韩欧美在线第一页| 日韩中文在线中文网在线观看| 91国产美女在线观看| 九九视频这里只有精品| 久久99精品视频一区97| 亚洲精品美女在线观看播放| 久久精品视频播放| 日韩激情av在线免费观看| 91亚洲精品久久久久久久久久久久| 亚洲成人久久网| 久久精品99久久久久久久久| 国产精品视频地址| 97av在线视频| 国产精品欧美激情在线播放| 国产成人黄色av| 亚洲一区二区久久| 午夜免费在线观看精品视频| 中文字幕亚洲第一| 欧美性猛交xxxx偷拍洗澡| 欧美激情第6页| 国产色综合天天综合网| 91精品国产91久久久| 国产视频在线一区二区| 欧美黑人狂野猛交老妇| 色中色综合影院手机版在线观看| 欧美高清videos高潮hd| 亚洲色图50p| 欧美夜福利tv在线| 国产99久久精品一区二区| 欧美性猛交xxxx免费看久久久| 久久久欧美一区二区| 日韩av中文字幕在线| 在线精品高清中文字幕| 一本大道香蕉久在线播放29| 97成人超碰免| 98精品国产自产在线观看| 日韩电影在线观看中文字幕| 成人免费淫片视频软件| 在线日韩第一页| 国产精品久久久久久久久久三级| 成人一区二区电影| 91在线观看免费高清完整版在线观看| 久久天天躁日日躁| 日韩精品一区二区三区第95| 国外日韩电影在线观看| 国产精品福利在线观看网址| 成人黄色生活片| 国产精品综合久久久| 日韩国产精品亚洲а∨天堂免| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产区亚洲区欧美区| 亚洲精品国产电影| 91久久精品国产91久久| 色一区av在线| 欧美成人一区在线| 欧美精品少妇videofree| 国产精品午夜一区二区欲梦| 动漫精品一区二区| 日韩在线观看免费高清完整版| 欧美国产一区二区三区| 久久久久久av| 大胆人体色综合| 国产精品极品尤物在线观看| 亚洲韩国欧洲国产日产av| 欧美性一区二区三区| 欧美有码在线观看| 在线中文字幕日韩| 欧美疯狂xxxx大交乱88av| 欧美一级高清免费播放| 亚洲国产高清自拍| 成人性生交大片免费观看嘿嘿视频| 国产自产女人91一区在线观看| 日韩美女福利视频| 国产ts人妖一区二区三区| 久久免费视频网| 亚洲精品二三区| 欧美一级成年大片在线观看| 国产精品9999| 国产精品一区二区三区在线播放| 国产在线观看精品| 91久久久久久久一区二区| 美女久久久久久久| 亚洲天堂免费观看| 俺去啦;欧美日韩| 亚洲国内精品在线| 欧洲s码亚洲m码精品一区| 日韩精品免费在线观看| 久久福利视频导航| 欧美一级片在线播放| 欧美激情va永久在线播放| 日本19禁啪啪免费观看www| 亚洲第一页在线| 欧美风情在线观看| 日本免费一区二区三区视频观看| 国产视频精品免费播放| 久久精品国产亚洲一区二区| 国产激情久久久| 欧美激情乱人伦一区| 91免费国产网站| 亚洲成人激情在线| 亚洲永久免费观看| 亚洲欧美在线x视频| 疯狂欧美牲乱大交777| 欧美一二三视频| 亚洲成年人影院在线| 91久久精品日日躁夜夜躁国产| 欧美另类精品xxxx孕妇| 亚洲丝袜一区在线| 97成人在线视频| 欧美在线播放视频| 欧美日韩国产一区在线| 性视频1819p久久| 久久综合伊人77777尤物| 亚洲小视频在线观看| 国产精品一区二区女厕厕|