基準測試類?

CodeIgniter 提供了兩個獨立的工具來幫助你對代碼進行基準測試,并測試不同的選項:Timer 和 Iterator。Timer 允許你輕松計算腳本執行中兩點之間的時間。迭代器允許你設置多個變量并運行這些測試,記錄性能和內存統計信息,以幫助你確定哪個版本是最佳的。

Timer類始終處于活動狀態,從框架被調用的那一刻開始,直到發送輸出到用戶之前,才能使整個系統執行的時間非常準確。

使用定時器?

使用Timer,你可以測量執行應用程序的兩個時刻之間的時間。這樣可以輕松測量應用程序的不同方面的性能。所有測量都是使用 start()stop() 方法完成的。

start() 方法采用單個參數:此定時器的名稱。你可以使用任何字符串作為計時器的名稱。它僅用于你以后參考以了解哪個測量是:

$benchmark = \Config\Services::timer();
$benchmark->start('render view');
stop() 方法將要停止的計時器的名稱作為唯一的參數,也是::
$benchmark->stop(‘render view’);

該名稱不區分大小寫,但除此之外必須與你在啟動計時器時給出的名稱相匹配。

或者,你可以使用 全局函數 timer() 來啟動和停止定時器:

// Start the timer
timer('render view');
// Stop a running timer,
// if one of this name has been started
timer('render view');

查看你的基準點?

當你的應用程序運行時,你設置的所有定時器都將由Timer類收集。它不會自動顯示它們。你可以通過調用 getTimers() 方法檢索所有的計時器。該方法返回一組基準信息,包括開始,結束和持續時間:

$timers = $benchmark->getTimers();

// Timers =
array(
        'render view' => array(
                'start' => 1234567890,
                'end' => 1345678920,
                'duration' => 15.4315      // number of seconds
        )
)

你可以通過傳遞要顯示的小數位數作為唯一參數來更改計算持續時間的精度。默認值為小數點后面的 4 個數字:

$timers = $benchmark->getTimers(6);

計時器會自動顯示在 Debub 工具欄中。

顯示執行時間?

getTimers() 方法將為你的項目中的所有計時器提供原始數據,你可以使用 getElapsedTime() 方法檢索單個計時器的持續時間(以秒為單位)。第一個參數是要顯示的定時器的名稱。第二個是要顯示的小數位數。默認為4:

echo timer()->getElapsedTime('render view');
// Displays: 0.0234

使用迭代器?

Iterator是一個簡單的工具,旨在讓你嘗試解決方案中的多個變體,以查看速度差異和不同內存使用模式。你可以添加任何數量的 “任務”,以便運行,該類將運行任務數百或數千次以獲得更清晰的性能。然后,你的腳本可以檢索和使用結果,或顯示為HTML表格。

創建任務運行?

任務在 Closures 內定義。任務創建的任何輸出將被自動丟棄。它們通過 add() 方法添加到 Iterator 類中。第一個參數是您想要引用這個測試的名稱;第二個參數是 Closure,它自己本身:

$iterator = new \CodeIgniter\Benchmark\Iterator();

// Add a new task
$iterator->add('single_concat', function()
        {
                $str = 'Some basic'.'little'.'string concatenation test.';
        }
);

// Add another task
$iterator->add('double', function($a='little')
        {
                $str = "Some basic {$little} string test.";
        }
);

運行任務?

你一旦添加了要運行的任務,你可以使用 run() 方法多次循環任務。默認情況下,它將循環運行 1000 次。這對大多數簡單的測試來說可能就足夠了,如果你需要運行測試多次,你可以將你希望運行數字作為第一個參數傳遞值:

// Run the tests 3000 times.
$iterator->run(3000);

一旦運行,它將返回帶有測試結果的 HTML 表格。如果你不希望顯示結果,可以通過傳遞第二個參數為 false:

// Don't display the results.
$iterator->run(1000, false);