ホームページ >バックエンド開発 >PHPチュートリアル >PHP パフォーマンス最適化ツールの章 ベンチマーク クラスのデバッグ 実行時間_PHP チュートリアル

PHP パフォーマンス最適化ツールの章 ベンチマーク クラスのデバッグ 実行時間_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:22:261010ブラウズ

这是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函数获取代码前后的微秒时间数再比较两个值的时间差,如下


但这种方法很有局限制,不能大范围的应用,而且每次都需要书写很多代码,适合于简单的调试。具体请查看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(); 如下图

php-performance-benchmark-timer

另外一种是手动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());


テスト関数を100回呼び出して平均実行時間を取得します。結果は以下の通りです

    array1 => 文字列 '0.000486' (長さ=8)2 => 文字列 '0.000466' (長さ=8) ......(中省略) 99 => 文字列 '0.000479' (長さ = 8) 100 => 文字列 '0.000467' (長さ = 8)'平均' => ; int 100

結果の説明
1、各数値は各呼び出しの時間を表します2、平均は関数の実行の平均時間を表し、テスト関数を100回呼び出す平均時間は0.000476です
3、反復回数は関数呼び出し


Benchmark_Profiler クラスの使い方
Benchmark_Profiler クラスは、関数の実行回数や実行時間などをカウントするために使用されます。例は次のとおりです。
require_once 'Benchmark/Profiler.php';$profiler = new Benchmark_Profiler(TRUE);function myFunction() { global $profiler; $profiler->enterSection('myFunction') //何かをする $profiler->leaveSection; ('myFunction'); return;}//何かをしてくださいmyFunction();//もっとやってください

    結果は以下の通りです


    Benchmark_Profiler クラスは、実際のパフォーマンスのデバッグではあまり使用されません。xDebuger など、これより優れたツールがあるため、直接無視できます。

    php-performance-benchmark-profilerBenchmark ツール クラスは、デバッグ中の行ごとのデバッグ中にプログラムのパフォーマンスの問題を分析するのに非常に役立ちます。 Benchmark_Timer クラスは、主に各コード セグメントの時点をデバッグして、プログラムを最適化し、コードのパフォーマンスを向上させるために使用されます。実行時間を取得することによって。ここでは詳しく説明しません。使用中に質問がある場合は、お気軽にお知らせください。

    この行ごとのデバッグが非常に面倒で難しいと感じ、プログラム全体のパフォーマンスを把握したい場合、このベンチマーク デバッグ ツールはニーズを満たすことができません。PHP パフォーマンス デバッグのインストールとインストール。ツール xDebuger については、次の号で説明します。



    関連情報

    microtime
    (PHP 3, PHP 4, PHP 5)
    microtime -- 現在の Unix タイムスタンプとマイクロ秒を返します
    説明
    mixed microtime ([bool get_as_float] )

    microtime() 現在の Unix タイムスタンプとマイクロ秒。この関数は、gettimeofday() システム コールをサポートするオペレーティング システムでのみ使用できます。
    オプションのパラメーターを指定せずに呼び出された場合、この関数は「msec sec」形式の文字列を返します。ここで、sec は Unix エポック (グリニッジ標準時 1970 年 1 月 1 日 0:00:00) からの秒数です。msec はマイクロ秒の部分です。 。文字列の両方の部分が秒単位で返されます。

    get_as_float パラメーターが指定され、その値が TRUE と同等の場合、microtime() は浮動小数点数を返します。

    注: get_as_float パラメーターは PHP 5.0.0 で新たに追加されました。



    拡張情報

    PHPベンチマーク/タイマークラスPHPベンチマークPHPスクリプト速度のベンチマークと最適化


    http://www.bkjia.com/PHPjc/324694.html

    www.bkjia.com

    http://www.bkjia.com/PHPjc/324694.html技術記事これは、PHP パフォーマンス最適化シリーズの第 2 回目です。PEAR ツール クラス Benchmark を使用してコードまたは関数の実行時間を 1 行ずつ取得する方法です。 労働者が仕事をうまくやりたいなら、まず道具を研ぐ必要があります。 PEAR と Benchma のインストール方法...
    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。