W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
CodeIgniter 提供了兩個(gè)獨(dú)立的工具來(lái)幫助你對(duì)代碼進(jìn)行基準(zhǔn)測(cè)試,并測(cè)試不同的選項(xiàng):Timer 和 Iterator。Timer 允許你輕松計(jì)算腳本執(zhí)行中兩點(diǎn)之間的時(shí)間。迭代器允許你設(shè)置多個(gè)變量并運(yùn)行這些測(cè)試,記錄性能和內(nèi)存統(tǒng)計(jì)信息,以幫助你確定哪個(gè)版本是最佳的。
Timer類始終處于活動(dòng)狀態(tài),從框架被調(diào)用的那一刻開(kāi)始,直到發(fā)送輸出到用戶之前,才能使整個(gè)系統(tǒng)執(zhí)行的時(shí)間非常準(zhǔn)確。
使用Timer,你可以測(cè)量執(zhí)行應(yīng)用程序的兩個(gè)時(shí)刻之間的時(shí)間。這樣可以輕松測(cè)量應(yīng)用程序的不同方面的性能。所有測(cè)量都是使用 start()
和 stop()
方法完成的。
該 start()
方法采用單個(gè)參數(shù):此定時(shí)器的名稱。你可以使用任何字符串作為計(jì)時(shí)器的名稱。它僅用于你以后參考以了解哪個(gè)測(cè)量是:
$benchmark = \Config\Services::timer();
$benchmark->start('render view');
該 stop()
方法將要停止的計(jì)時(shí)器的名稱作為唯一的參數(shù),也是::
$benchmark->stop(‘render view’);
該名稱不區(qū)分大小寫(xiě),但除此之外必須與你在啟動(dòng)計(jì)時(shí)器時(shí)給出的名稱相匹配。
或者,你可以使用 全局函數(shù) timer()
來(lái)啟動(dòng)和停止定時(shí)器:
// Start the timer
timer('render view');
// Stop a running timer,
// if one of this name has been started
timer('render view');
當(dāng)你的應(yīng)用程序運(yùn)行時(shí),你設(shè)置的所有定時(shí)器都將由Timer類收集。它不會(huì)自動(dòng)顯示它們。你可以通過(guò)調(diào)用 getTimers()
方法檢索所有的計(jì)時(shí)器。該方法返回一組基準(zhǔn)信息,包括開(kāi)始,結(jié)束和持續(xù)時(shí)間:
$timers = $benchmark->getTimers();
// Timers =
array(
'render view' => array(
'start' => 1234567890,
'end' => 1345678920,
'duration' => 15.4315 // number of seconds
)
)
你可以通過(guò)傳遞要顯示的小數(shù)位數(shù)作為唯一參數(shù)來(lái)更改計(jì)算持續(xù)時(shí)間的精度。默認(rèn)值為小數(shù)點(diǎn)后面的 4 個(gè)數(shù)字:
$timers = $benchmark->getTimers(6);
計(jì)時(shí)器會(huì)自動(dòng)顯示在 Debub 工具欄中。
該 getTimers()
方法將為你的項(xiàng)目中的所有計(jì)時(shí)器提供原始數(shù)據(jù),你可以使用 getElapsedTime()
方法檢索單個(gè)計(jì)時(shí)器的持續(xù)時(shí)間(以秒為單位)。第一個(gè)參數(shù)是要顯示的定時(shí)器的名稱。第二個(gè)是要顯示的小數(shù)位數(shù)。默認(rèn)為4:
echo timer()->getElapsedTime('render view');
// Displays: 0.0234
Iterator是一個(gè)簡(jiǎn)單的工具,旨在讓你嘗試解決方案中的多個(gè)變體,以查看速度差異和不同內(nèi)存使用模式。你可以添加任何數(shù)量的 “任務(wù)”,以便運(yùn)行,該類將運(yùn)行任務(wù)數(shù)百或數(shù)千次以獲得更清晰的性能。然后,你的腳本可以檢索和使用結(jié)果,或顯示為HTML表格。
任務(wù)在 Closures 內(nèi)定義。任務(wù)創(chuàng)建的任何輸出將被自動(dòng)丟棄。它們通過(guò) add() 方法添加到 Iterator 類中。第一個(gè)參數(shù)是您想要引用這個(gè)測(cè)試的名稱;第二個(gè)參數(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.";
}
);
你一旦添加了要運(yùn)行的任務(wù),你可以使用 run()
方法多次循環(huán)任務(wù)。默認(rèn)情況下,它將循環(huán)運(yùn)行 1000 次。這對(duì)大多數(shù)簡(jiǎn)單的測(cè)試來(lái)說(shuō)可能就足夠了,如果你需要運(yùn)行測(cè)試多次,你可以將你希望運(yùn)行數(shù)字作為第一個(gè)參數(shù)傳遞值:
// Run the tests 3000 times.
$iterator->run(3000);
一旦運(yùn)行,它將返回帶有測(cè)試結(jié)果的 HTML 表格。如果你不希望顯示結(jié)果,可以通過(guò)傳遞第二個(gè)參數(shù)為 false:
// Don't display the results.
$iterator->run(1000, false);
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: