php获取目标函数执行时间

  几个星期以前,写了一个正则从新浪网首页获取所有的链接地址,存入数组print_r()出来,大约是1400条记录。只是print_r()的话,大概花费了3-4秒的时间,后来,我又加上写入数据库的函数,把取得的url(href中的内容)和链接名(<a></a>之间的内容)写入数据库中,那个php一执行就没有响应,直到页面返回超过最大执行时间的警告。这时,我才真正的体会到搜索引擎从互联网上获取内容的艰辛。

  因此,今天写了一个类,取名为EfficiencyTester,用来测试目标函数的执行时间。贴上代码,希望能与网上的众多大神交流。

  以下是类的定义代码:

<?php

/**

 * 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;

    }

}

?>

  以下是类的测试代码:

<?php

require_once('../class/EfficiencyTester.class.php');



$e = new EfficiencyTester();



echo $e->test('rand');



?>

  一开始我是直接使用 microtime() 获取时间的,后来考虑到如果想获得单位是秒的运行时间,这样写就不够多态了,然后我就写了一个getTime() 的函数来获取不同单位的时间戳,不过这样,貌似目标函数的运行时间变长了,可能是因为 getTime() 函数中的判断占用了一部分时间。如果各位看官有什么好的主意,希望能给我留言,让我学习学习~O(∩_∩)O

你可能感兴趣的:(PHP)