ホームページ  >  記事  >  バックエンド開発  >  PHP アーカイブ phar パフォーマンス テスト

PHP アーカイブ phar パフォーマンス テスト

WBOY
WBOYオリジナル
2016-06-13 11:56:351193ブラウズ

PHP アーカイブ phar パフォーマンス テスト
PHP は 5.3 から PHAR アーカイブを追加しました。Phar アーカイブの概念は、単一のファイルを使用してアプリケーションをパッケージ化できるようにします。アプリケーション。このファイルは、実際にはコンパイルされたアプリケーションではなくアーカイブ ファイルであるという点で、通常 C などのプログラミング言語によって生成される単一の実行可能ファイルとは異なります。したがって、JAR ファイルには実際にはアプリケーションを構成するファイルが含まれていますが、セキュリティ上の理由からこれらのファイルは慎重に区別されていません。 Phar 拡張機能も同様の概念に基づいていますが、主に PHP の Web 環境向けに設計されています。また、JAR アーカイブとは異なり、Phar アーカイブは PHP 自体で処理できるため、作成または使用するために追加のツールは必要ありません。 Phar 拡張機能は、PHP にとって新しい概念ではありません。これはもともと PHP で書かれ、2005 年に PEAR ライブラリに追加される前は PHP_Archive という名前でした。ただし、実際には、この問題に対する純粋な PHP ソリューションは非常に遅かったため、2007 年に純粋な C 言語拡張機能として書き直され、SPL の ArrayAccess オブジェクトを使用した Phar アーカイブの走査のサポートが追加されました。それ以来、Phar アーカイブのパフォーマンスを向上させるために多くの取り組みが行われてきましたが、現在では Phar の使用は非常に限られており、Phar のパフォーマンス テストはほとんど行われていません。簡単な実験。

テスト環境:
PHP: 5.5.10
CPU: 2GHz intel core i7
メモリ: 8GB
システム: Darwin 13.1.0

主なテストポイント:
1: Phar の読み込み速度
1.1: ファイル サイズの影響は何ですか?
1.2: include/require の影響?
1.3: Phar スタブコンテンツの影響は何ですか?
2: Phar コードの実行速度
2.1 グローバル関数の比較
2.2 クラス オブジェクト
2.3 クラス メソッド
テストが可能な限り正確であることを保証するために、各メソッドが実行されます 3 3 回の平均値が値となります。同時に、比較のために、コードを直接使用してベンチマーク データを取得します。
Phar ファイルには、主にファイル


phar-builder.php が含まれています。テスト コマンドを実行する前に、このファイルを実行して、 phar-test.phar ファイル。
test_load.php は、phar ファイルのロード速度をテストします。
src ディレクトリに含まれるindex.php ファイルは、dates.php、for.php、functions.php、日付テスト ファイル クラス メソッド、 for.php テスト オブジェクト メソッド、functions.php テスト関数メソッド。
特定の添付ファイル コード。
最初: phar の読み込み速度。include メソッドと require メソッドを使用してテストしたところ、大きな違いはなく、require メソッドのみが使用されることがわかりました。

$stime = microtime(true);require './phar-test.phar';$etime = microtime(true);$total = $etime - $stime;echo "phar total:".$total."s";
実行後の効率は以下の通りです
localhost:phar ugg$ php test_phar_load.php phar total:0.0044760704040527slocalhost:phar ugg$ php test_phar_load.php phar total:0.0051448345184326slocalhost:phar ugg$ php test_phar_load.php phar total:0.0043849945068359slocalhost:phar ugg$ vim test_phar_load.php

平均ロード時間は 4.7 ミリ秒です

と比較ソースコードを直接参照する方法。

$stime = microtime(true);require './src/index.php';$etime = microtime(true);$total = $etime - $stime;echo "src total:".$total."s\n";

実行後の効率は以下の通りです

localhost:phar ugg$ php test_src_load.phpsrc total:0.0026230812072754slocalhost:phar ugg$ php test_src_load.phpsrc total:0.0026969909667969slocalhost:phar ugg$ php test_src_load.phpsrc total:0.0025439262390137s

平均負荷時間は 2.6 ミリ秒です
結論: ロード速度を比較すると、phar ロード方法はファイルを直接ロードする方法よりもはるかに遅く、ファイルを直接参照する場合のほぼ 2 倍の時間がかかります。同時に、phar ファイルを大きくするためにいくつかの干渉ファイルを phar ファイルにロードしましたが、10k 以内ではロード時間はあまり変わらないことがわかりました。もちろん、新しく追加したファイルをスタブに入れたのは、10K を超えるディレクトリの場合、ファイルの編成方法がオートロードなどであり、すべてのファイルが 1 つのファイルに含まれるわけではないためです。 phar のロード時間は、src を直接ロードする場合の約 1.8 倍です。

2 番目: 実行速度テスト
phar メソッド、コードは次のとおりです

    $stime = microtime(true);    //require 'phar://phar-test.phar';    require 'phar-test.phar';    $sstime = microtime(true);    for($i = 0; $i<10000; ++$i){        $date = dates::next_week();        $for = new fortest();        $i = $for->for1to10000();        $number = number2Chinese('12345');    }       $eetime = microtime(true);    $etime = microtime(true);    $total = $etime - $stime;    $total2 = $eetime - $sstime;    echo "phar load total:".$total."s\n";    echo "phar execution 10000 total:".$total2."s";
実行効率は次のとおりです
localhost:phar ugg$ php test_phar_functions.php phar load total:0.0047600269317627sphar execution 10000 total:0.00017499923706055slocalhost:phar ugg$ php test_phar_functions.php phar load total:0.004863977432251sphar execution 10000 total:0.00017404556274414slocalhost:phar ugg$ php test_phar_functions.php phar load total:0.004680871963501sphar execution 10000 total:0.00016689300537109s
10,000 回実行 クラスメソッド、オブジェクトインスタンスとオブジェクトメソッド、および関数メソッドの合計消費時間は 0.17 ミリ秒です。
src 実行効率
localhost:phar ugg$ php test_src_functions.php phar load total:0.0029089450836182sphar execution 10000 total:0.00019693374633789slocalhost:phar ugg$ php test_src_functions.php phar load total:0.0028579235076904sphar execution 10000 total:0.0002140998840332slocalhost:phar ugg$ php test_src_functions.php phar load total:0.0029168128967285sphar execution 10000 total:0.00019478797912598s
クラス メソッド、オブジェクト インスタンス、オブジェクト メソッド、および関数メソッドを 10,000 回実行し、合計の消費時間は 0.20 ミリ秒です。
要約: 実行速度を比較すると、phar メソッドの実行速度は、直接ファイル インクルードメソッドよりも速いことがわかります (0.20-0.17)/0.20*100=15% (具体的な実行速度)。 apc include_path を設定すると、phar メソッドの実行速度が非常に速くなるという情報がインターネット上にあります。 https://github.com/ralphschindler/test-phar-performance-apc/。

まとめ: PHPアーカイブphar方式は、通常のファイルインクルード方式よりも読み込み速度が遅くなりますが、include_path設定とAPCやOP方式を連携させると、実行速度が速くなります。 phar アーカイブの読み込み速度を最適化することで、php の実行速度を向上させることができます。次のステップでは、いくつかの試みを行います。 1: 大きな phar ファイルを構築し、読み込み速度と実行速度を実験します。 2: phar ローディングの原則と実行原則を理解する、3: パッケージの概念管理と依存関係を理解する。


その他の参考資料
PHP V5.3 の新機能、Phar アーカイブの作成と使用。 http://www.ibm.com/developerworks/cn/opensource/os-php-5.3new4/
test-phar-performance-apc https://github.com/ralphschindler/test-phar-performance-apc /

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。