CodeIgniter4 基準測試類

2020-08-17 17:47 更新

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

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

使用定時器

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

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

$benchmark = \Config\Services::timer();
$benchmark->start('render view');

stop() 方法將要停止的計時器的名稱作為唯一的參數(shù),也是::

$benchmark->stop(‘render view’);

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

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

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

查看你的基準點

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

$timers = $benchmark->getTimers();


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

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

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

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

顯示執(zhí)行時間

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

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

使用迭代器

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

創(chuàng)建任務運行

任務在 Closures 內定義。任務創(chuàng)建的任何輸出將被自動丟棄。它們通過 add() 方法添加到 Iterator 類中。第一個參數(shù)是您想要引用這個測試的名稱;第二個參數(shù)是 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() 方法多次循環(huán)任務。默認情況下,它將循環(huán)運行 1000 次。這對大多數(shù)簡單的測試來說可能就足夠了,如果你需要運行測試多次,你可以將你希望運行數(shù)字作為第一個參數(shù)傳遞值:

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

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

// Don't display the results.
$iterator->run(1000, false);
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號