基準測試¶
CodeIgniter 提供了兩個獨立的工具——計時器與疊代器,來幫助你測試你的程式以及不同的選項。計時器可以讓你輕鬆地計算出腳本執行的過程中,你所設定的兩個點之間的時間。疊代器讓你可以設定數種變化,並執行這些測試,執行效能與記憶體的統計,幫助你決定哪個版本是最好的。
計時器類別始終處於啟動狀態,從框架被呼叫的那一刻開始,直到將輸出響應給使用者之前,定時器才會停止統計,這使得整個系統執行時間的計算非常地精準。
使用計時器¶
透過計時器,你可以測量應用程式執行的過程中,任意兩個點之間的耗時,這會讓你在測量應用程式於不同方面的效能上變得非常容易。所有的測量都是透過 start()
與 stop()
這兩個方法完成。
start()
方法只需要傳入一個參數,你可以使用任何字串作為計時器的名稱。它只是用來讓你參考,知道哪個測量記錄是哪個:
$benchmark = \Config\Services::timer();
$benchmark->start('render view');
stop()
方法則是以你要停止的計時器名稱作為唯一的傳入參數:
$benchmark->stop('render view');
這個名稱不區分大小寫,但必須與啟動計時器時給予的名稱相符。
另外,你也可以使用 全域函數 timer()
來啟動與停止計時器。
// 開始計時器
timer('render view');
// 如果以這個名子命名的計時器已經啟動
// 將停止計時器,
timer('render view');
查閱基準測試得分¶
當你的應用程式開始執行,你所設定的所有計時器都會被計時器類別蒐集起來,但它不會自動顯示這些計時器。你可以透過呼叫 getTimers()
方法來調閱所有的計時器。這個方法會回傳一個基準測試訊息的陣列,包括開始、結束與持續時間。
$timers = $benchmark->getTimers();
// Timers =
[
'render view' => [
'start' => 1234567890,
'end' => 1345678920,
'duration' => 15.4315 // number of seconds
]
]
你可以透過傳入你所希望顯示的小數位數作為唯一的參數,用於改變計算出的持續時間的精度。預設值是小數點後四位。
$timers = $benchmark->getTimers(6);
計時器會自動顯示在 除錯工具列 上。
使用疊代器¶
疊代器是一個簡單的工具,設計這個工具的目的是為了讓你在一個解決方案上嘗試不同的變化,看看速度差異與不同的記憶體使用模式。你可以加入任意數量的「任務」讓它執行。類別將會執行著數百或數千次的任務,以計算更準確的效能。最後的結果可以被你查閱,也可以將它輸出為 HTML 表格。
指派欲執行的任務¶
任務是在匿名函數中被定義的,任務所創建的任何輸出都會被自動拋棄。任務透過 add()
方法加入到疊代器之中。第一個參數是你的測試的名稱,第二個參數才是匿名函數本身。
$iterator = new \CodeIgniter\Benchmark\Iterator();
// 加入新的任務
$iterator->add('single_concat', function () {
$str = 'Some basic'.'little'.'string concatenation test.';
});
// 加入另一項任務
$iterator->add('double', function ($a = 'little') {
$str = "Some basic {$little} string test.";
});