close
恩~感謝朋友們的關心,這幾天有點小感冒,不過總算把藍星侵略者143完食。
現在讓我們來看一下源碼解說,以下三個函數是時點這項功能相關的函數:


    function 時點($註記){
        $this->時點[$註記] = microtime(true);
    }

    function 時差($開始, $結束){
        $時點 = microtime(true);
        $開始 = &$this->時點[$開始];
        $結束 = &$this->時點[$結束];
        變數:預設($開始, $時點);
        變數:預設($結束, $時點);
        return abs($開始 - $結束);
    }

    function &彙整:時點($表格 = false){
        $索引 = 0;
        $累計 = 0;
        $輸出 = array();
        asort($this->時點);
        $開始 = reset($this->時點);
        foreach ($this->時點 as $註記 => $時點) {
            $時差 = abs($時點 - $開始);
            $累計 += $時差;
            $輸出[$索引] = compact(array_keys($this->編碼['時點']));
            $開始 = $時點;
            $索引++;
        }
        if ($表格) {
            $輸出 = 網頁:表格($輸出, $this->編碼['時點'], '時點', $this->屬性);
        }
        return $輸出;
    }

function 網頁:表格(&$陣列, &$編碼, $標題 = '', &$屬性 = array()){
    $輸出 = array();
    $排序 = array_keys($編碼);
    $輸出[] = '<table' . 網頁:屬性($屬性, true) .'>';
    if (false == empty($標題)) {
        $輸出[] = '<caption>' . htmlspecialchars($標題) . '</caption>';
    }
    $輸出[] = '<tr><th>' . implode('</th><th>', $排序) . '</th></tr>';

    foreach ($陣列 as &$內容){
        $內容 = 陣列:排序($內容, $排序, true);
        if (0 == count($內容)) {
            continue;
        }
        $內容 = 陣列:編碼($內容, $編碼);
        foreach ($內容 as $鍵 => &$值) {
            if ('' == $值) {
                $內容[$鍵] = '&nbsp;';
            }
        }
        $輸出[] = '<tr><td>' . implode('</td><td>', $內容) . '</td></tr>';
    }

    $輸出[] = '</table>';
    return implode("\n", $輸出);
}


對於量測這個類別來說,在可能的範圍下,盡量求取精確是很重要的一點,所以Benchmark才會去支援BCMath的一些運算方法,希望能提高浮點數的精確度。

實際上,若用BCMath配合microtime,可以得到的精確度是小數點後四位。不過相對於精確度來說,數個樣本的比較希望得到「顯著」的差異,這才是對量測來說更重要的事情。
因為得不到實質上的好處,所以我放棄支援BCMath,專心來處理其他的問題。

在處理跟時間相關的問題時,我發現有時明明比較後面才取得microtime的,可是其數值卻比較小,因此我在所有求取時差的部份全部加上abs來計算絕對值。

彙整:時點 的部份我在處理時先作過排序是因為怕不小心重複使用了相同註記,所以先依照取得的microtime做好排序,然後再產生報表。

輸出的部份我設計了一個通用的輸出HTML的表格的函數,這個函數可以接受一個二維陣列作為資料來源,另外一個一維陣列指示如何處理資料,你可以從 $編碼 這個成員變數看出如何彈性設置,讓這個函數發揮效用。不過呢,這個函數中的迴圈跑了太多次,我會想想該如何改進。
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 HACGIS 的頭像
    HACGIS

    失落的技術

    HACGIS 發表在 痞客邦 留言(0) 人氣()