|
寫了一個(gè)類用來測(cè)試目標(biāo)函數(shù)的執(zhí)行時(shí)間。以下是類的定義代碼:
復(fù)制代碼 代碼如下:
<?php
/**
* class EfficiencyTester
* 效率測(cè)試器,測(cè)試函數(shù)的運(yùn)行時(shí)間
* @version 1.0 2013.04.13
* @author Kross
*/
class EfficiencyTester {
/**
* var $testTimes
* 測(cè)試的次數(shù)
*/
private $testTimes = 1000;
/**
* function getTime()
* 根據(jù)時(shí)間模式,獲取時(shí)間戳
* @param $timeModel 時(shí)間模式,默認(rèn):微秒
* @return int 時(shí)間戳
*/
private function getTime($timeModel = 'MS') {
if ($timeModel == 'MS') {
return microtime();
} else if ($timeModel == 'S') {
return time();
} else {
return microtime();
}
}
/**
* function testOnce()
* 測(cè)試目標(biāo)函數(shù)一次,返回運(yùn)行時(shí)間
* @param $functionName 目標(biāo)函數(shù)名
* @param $timeModel 時(shí)間模式,默認(rèn):微秒
* @return double 目標(biāo)函數(shù)運(yùn)行一次的時(shí)間(很隨機(jī))
*/
public function testOnce($functionName, $timeModel = 'MS') {
$startMicroTime = $this->getTime($timeModel);
$functionName();
$endMicroTime = $this->getTime($timeModel);
$costMicroTime = $endMicroTime - $startMicroTime;
return $costMicroTime;
}
/**
* function test()
* 測(cè)試目標(biāo)函數(shù)多次,返回運(yùn)行時(shí)間(平均值)
* @param $functionName 目標(biāo)函數(shù)名
* @param $timeModel 時(shí)間模式,默認(rèn):微秒
* @return double 目標(biāo)函數(shù)運(yùn)行的時(shí)間
*/
public function test($functionName, $timeModel = 'MS') {
$totalMicroTimes = 0;
for ($i = 1; $i <= $this->testTimes; $i++) {
$totalMicroTimes += $this->testOnce($functionName);
}
return $totalMicroTimes / $this->testTimes;
}
}
?>
以下是類的測(cè)試代碼:
復(fù)制代碼 代碼如下:
<?php
require_once('../class/EfficiencyTester.class.php');
$e = new EfficiencyTester();
echo $e->test('rand');
?>
一開始我是直接使用 microtime() 獲取時(shí)間的,后來考慮到如果想獲得單位是秒的運(yùn)行時(shí)間,這樣寫就不夠多態(tài)了,然后我就寫了一個(gè)getTime() 的函數(shù)來獲取不同單位的時(shí)間戳,不過這樣,貌似目標(biāo)函數(shù)的運(yùn)行時(shí)間變長(zhǎng)了,可能是因?yàn)?getTime() 函數(shù)中的判斷占用了一部分時(shí)間。
php技術(shù):php獲取目標(biāo)函數(shù)執(zhí)行時(shí)間示例,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。