1、php自定义类EfficiencyTester,用来测试目标函数的执行时间。
<?php /** * class EfficiencyTester * 效率测试器,测试函数的运行时间 * @version 1.0 2013.04.13 * @author Kross * @site http://www.jb200.com */ class EfficiencyTester { /** * var $testTimes * 测试的次数 */ private $testTimes = 1000; /** * function getTime() * 根据时间模式,获取时间戳 * @param $timeModel 时间模式,默认:微秒 * @return int 时间戳 */ private function getTime($timeModel = 'MS') { if ($timeModel == 'MS') { return microtime(); } else if ($timeModel == 'S') { return time(); } else { return microtime(); } } /** * function testOnce() * 测试目标函数一次,返回运行时间 * @param $functionName 目标函数名 * @param $timeModel 时间模式,默认:微秒 * @return double 目标函数运行一次的时间(很随机) */ public function testOnce($functionName, $timeModel = 'MS') { $startMicroTime = $this->getTime($timeModel); $functionName(); $endMicroTime = $this->getTime($timeModel); $costMicroTime = $endMicroTime - $startMicroTime; return $costMicroTime; } /** * function test() * 测试目标函数多次,返回运行时间(平均值) * @param $functionName 目标函数名 * @param $timeModel 时间模式,默认:微秒 * @return double 目标函数运行的时间 */ public function test($functionName, $timeModel = 'MS') { $totalMicroTimes = 0; for ($i = 1; $i <= $this->testTimes; $i++) { $totalMicroTimes += $this->testOnce($functionName); } return $totalMicroTimes / $this->testTimes; } } ?>
测试代码:
<?php require_once('../class/EfficiencyTester.class.php'); $e = new EfficiencyTester(); echo $e->test('rand'); ?>
说明:
开始直接使用 microtime() 获取时间的,后来考虑到如果想获得单位是秒的运行时间,这样写就不够多态了,然后我就写了一个getTime() 的函数来获取不同单位的时间戳,不过这样,貌似目标函数的运行时间变长了,可能是因为 getTime() 函数中的判断占用了一部分时间。
期待大家有更多更好的实现方法,共同交流,一起进步哦。