程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> php獲取目標函數執行時間

php獲取目標函數執行時間

編輯: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

   
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved