工欲善其事,必先利其器!

如何安裝PEAR和Benchmark

請參考PHP性能優化系列第一期 [PHP性能優化準備篇圖解PEAR安裝]

Benchma " /> 在线免费观看黄色,欧美亚洲国产一区,免费一级黄

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

PHP性能優化工具篇Benchmark類調試執行時間

這是php性能優化系列第二期,如何使用PEAR工具類Benchmark逐行獲取代碼或函數的執行時間。

工欲善其事,必先利其器!

如何安裝PEAR和Benchmark

請參考php性能優化系列第一期 [php性能優化準備篇圖解PEAR安裝]

Benchmark工具類包說明

直接下載:http://pear.php.NET/package/Benchmark/download
Benchmark工具類包共有三個文件,分別是Timer.php、Iterate.php和Profiler.php,三個工具類功能相同,只是側重點不同,都是用于調試代碼獲取程序的執行時間。

1,Benchmark_Timer類原理與通過microtime函數獲取微秒時間再比較前后兩個時間值的差相同。
2,Benchmark_Iterate類用于調試函數的平均執行時間。
3,Benchmark_Profiler類用于統計代碼和函數的執行時間以及函數的調用次數。

具體使用方法三個文件內都有詳細的使用實例。

如何獲取一行或一段代碼的執行時間

1,通常使用microtime函數獲取代碼前后的微秒時間數再比較兩個值的時間差,如下

    <?phpfunction microtime_float(){    list($usec, $sec) = explode(" ", microtime());    return ((float)$usec + (float)$sec);} $time_start = microtime_float(); usleep(100); $time_end = microtime_float();$time = $time_end - $time_start; echo "Did nothing in $time seconds/n";?>


但這種方法很有局限制,不能大范圍的應用,而且每次都需要書寫很多代碼,適合于簡單的調試。具體請查看php手冊詳細說明。

2,通過使用benchmark_Timer類獲取代碼前后執行的時間差,可以同時獲取N行代碼的執行時間,操作簡單,只需要增加一個marker標記即可,請看下面Benchmark_Timer類的使用說明

如何使用Benchmark_Timer類

Benchmark_Timer類只需要在調試文件中增加Benchmark_Timer類初始化聲明和marker標注,文件尾打印各個標注處的執行時間,實例如下

    require_once 'Benchmark/Timer.php';$timer = new Benchmark_Timer();$timer->start();$timer->setMarker("marker 01");usleep(1);$timer->setMarker("marker 02");usleep(2);$timer->setMarker("marker 03");usleep(3);$timer->stop();$timer->display();


打印結果有兩種方法:

一種是表格輸出方式,$timer->display(); 如下圖

<aphp-performance-benchmark-timer src="/d/file/itjie/phpjishu/2014-10-22/2c29cb433c3c708d43f00af6d91ae66c.png">

另外一種是手動var_dump或print_r打印,$timer->getProfiling();,print_r函數打印如下圖

    array0 =>array'name' => string 'Start' (length=5)'time' => string '1265942405.31334800' (length=19)'diff' => string '-' (length=1)'total' => string '-' (length=1)1 =>array'name' => string 'marker 01' (length=9)'time' => string '1265942405.31374400' (length=19)'diff' => string '0.000396' (length=8)'total' => string '0.000396' (length=8)2 =>array'name' => string 'marker 02' (length=9)'time' => string '1265942405.31423000' (length=19)'diff' => string '0.000486' (length=8)'total' => string '0.000882' (length=8)3 =>array'name' => string 'marker 03' (length=9)'time' => string '1265942405.31519200' (length=19)'diff' => string '0.000962' (length=8)'total' => string '0.001844' (length=8)4 =>array'name' => string 'Stop' (length=4)'time' => string '1265942405.31623800' (length=19)'diff' => string '0.001046' (length=8)'total' => string '0.002890' (length=8)


結果說明
1,name表示標注名稱,如上 包含兩個特殊標注start和stop表示開始和結束,其次是自定義標注 marker 01 marker 02等
2,time表示當前的微秒時間
3,diff表示上一個標記到當前標記的執行時間,這個就是我們需要獲取的時間差,沒錯,看的就是這個值。
4,total表示執行到當前的整個時間

如何使用Benchmark_Iterate類

Benchmark_Iterate類用于調試函數執行的平均時間,與Benchmark_Timer類不同在于可以多次調用同一個函數獲取其執行時間的平均值,實例如下:

    require_once "Benchmark/Iterate.php";$bench = new Benchmark_Iterate;function test($i){    echo $i;}$bench->run(100,"test",10);var_dump($bench->get());


通過調用test函數100次獲取平均執行時間,結果如下

    array1 => string '0.000486' (length=8)2 => string '0.000466' (length=8).............................(中間省略)99 => string '0.000479' (length=8)100 => string '0.000467' (length=8)'mean' => string '0.000476' (length=8)'iterations' => int 100


結果說明
1,每個數字表示每次調用的時間
2,mean表示函數執行的平均時間,如上調用100次test函數的平均時間為0.000476
3,iterations表示函數調用的次數

如何使用Benchmark_Profiler類


Benchmark_Profiler類用于統計函數的執行次數和執行時間等,實例如下:

    require_once 'Benchmark/Profiler.php';$profiler = new Benchmark_Profiler(TRUE);function myFunction() {    global $profiler;     $profiler->enterSection('myFunction');     //do something     $profiler->leaveSection('myFunction');     return;}//do somethingmyFunction();//do more


結果如下

<aphp-performance-benchmark-profiler src="/d/file/itjie/phpjishu/2014-10-22/ca5877ad458af5510492d0d39f61d975.png">

Benchmark_Profiler類在實際性能調試中使用并不多,因為還有比這個更好的工具,如xDebuger等,因此可直接忽略!

Benchmark 工具類在使用調試中針對逐行調試來分析程序性能問題非常實用,主要使用Benchmark_Timer類調試各代碼段的時間點,以通過獲取執行時間來優化程序提高代碼的性能。這里就不再深入討論,如果在使用的過程中有什么問題歡迎大家一起交流!

如果你發現這種逐行調試很累很辛苦,如果你想從整體上把握程序的性能情況,這個Benchmark類調試工具就不能滿足你的需求,下期將討論php性能調試工具xDebuger的安裝與使用。

相關資料

microtime

(php 3, php 4, php 5)

microtime -- 返回當前 Unix 時間戳和微秒數
說明
mixed microtime ( [bool get_as_float] )

microtime() 當前 Unix 時間戳以及微秒數。本函數僅在支持 gettimeofday() 系統調用的操作系統下可用。
如果調用時不帶可選參數,本函數以 "msec sec" 的格式返回一個字符串,其中 sec 是自 Unix 紀元(0:00:00 January 1, 1970 GMT)起到現在的秒數,msec 是微秒部分。字符串的兩部分都是以秒為單位返回的。

如果給出了 get_as_float 參數并且其值等價于 TRUE,microtime() 將返回一個浮點數。

注意: get_as_float 參數是 php 5.0.0 新加的。

擴展資料
php Benchmark/Timer Class
php Benchmark
Benchmark and Optimize php Script Speed

php技術PHP性能優化工具篇Benchmark類調試執行時間,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 精品麻豆视频 | 国产伦久视频免费观看 视频 | 337p日本大胆欧美人术艺术精品 | 国产色手机在线观看播放 | 日本久久道一区二区三区 | 在线观看免费精品国产 | 黄 色 成 年人在线 黄 色 免 费 网站在线观看 | 国产激情网 | 五月婷婷免费视频 | 亚洲黄视频 | 在线观看成人免费视频 | 黑人www| 五月六月婷婷 | 久久99亚洲综合精品首页 | 奇米色吧| 国产一区二区三区免费观看 | 9久9久女女热精品视频免费观看 | 深爱激情五月婷婷 | 七七国产福利在线二区 | 国产成人精选免费视频 | 国内精品久久久久久麻豆 | 国产精品专区第二 | 黄视频在线观看网站 | 伊人99在线观看 | 精品色哟哟视频在线观看 | 日韩经典欧美一区二区三区 | 日韩免费视频一区 | 欧美成人三级网站在线观看 | 亚洲大成色www永久网址 | 日韩欧美一区二区三区中文精品 | 视频黄在线观看 | 在线视频一区二区三区四区 | 色哟哟色院91精品网站 | 亚洲综合图片人成综合网 | 一级女人毛片 | 美女被男人桶到嗷嗷叫爽网站 | 成人免费大片黄在线观看com | 亚洲黄网视频 | 久久精品国产国语对白 | 国产成人悠悠影院 | 狠狠干一区 |