-
- /**
- * class EfficiencyTester
- * 效率测试器,测试函数的运行时间
- * @version 1.0 2013.04.13
- * @author Kross
- */
- 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;
- }
- }
- ?>
复制代码
测试代码:
-
- require_once('../class/EfficiencyTester.class.php');
- $e = new EfficiencyTester();
- echo $e->test('rand');
- ?>
-
复制代码
一开始直接使用 microtime() 获取时间的,后来考虑到如果想获得单位是秒的运行时间,这样写就不够多态了,然后就写了一个getTime() 的函数来获取不同单位的时间戳。
如此貌似目标函数的运行时间变长了,可能是因为 getTime() 函数中的判断占用了一部分时间。
|