ホームページ  >  記事  >  php教程  >  PHP アーカイブ phar パフォーマンス テスト

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

WBOY
WBOYオリジナル
2016-06-21 08:48:161235ブラウズ

PHP は 5.3 から PHAR アーカイブを追加しました。Phar アーカイブの概念は、単一のファイルを使用してアプリケーションをパッケージ化できるようにする Java の JAR アーカイブに由来しています。このファイルは、実際にはコンパイルされたアプリケーションではなくアーカイブ ファイルであるという点で、通常 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 ファイルの生成に使用されるファイル


phar-builder.php が含まれています。テスト コマンドを実行する前に、このファイルを実行して phar を生成します。 -test.phar ファイル。
test_load.php は、phar ファイルのロード速度をテストします。
src ディレクトリに含まれるファイルindex.php は、dates.php、fZ喎?http://www.2cto.com/kf を含むスタブ ファイルです。 /ware/vc /" target="_blank" class="keylink">vci5waHAsZnVuY3Rpb25zLnBocKOsZGF0ZXOy4srUzsS8/sDgt723qKOsZm9yLnBocLLiytS21M/zt723qKOsZnVuY3Rpb25zLnBocLLiytS6r8r9t723qKG j PGJyIC8+vt/M5bi9vP60+sLroaM8YnIgLz612tK7o7pwaGFyvNPU2MvZtsijrLLJ08NpbmNsdWRlus1yZXF1aXJlt73KvbLiytS3os/Wsu7S7LK7tPOjrNa7ssnTw3JlcXVpcmW3vcq9oaM 8YnIgLz48L3A+PHByZSBjbGFzcz0="brush:java;">$stime = microtime(true); 「./phar-test.phar」が必要です。 $etime = マイクロタイム(true); $total = $etime - $stime; echo "phar total:".$total."s";実行後の効率は以下の通りです

localhost:phar ugg$ php test_phar_load.php 
phar total:0.0044760704040527s
localhost:phar ugg$ php test_phar_load.php 
phar total:0.0051448345184326s
localhost:phar ugg$ php test_phar_load.php 
phar total:0.0043849945068359s
localhost: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.0026230812072754s
localhost:phar ugg$ php test_src_load.phpsrc 
total:0.0026969909667969s
localhost: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.0047600269317627s
phar execution 10000 total:0.00017499923706055s
localhost:phar ugg$ php test_phar_functions.php 
phar load total:0.004863977432251s
phar execution 10000 total:0.00017404556274414s
localhost:phar ugg$ php test_phar_functions.php 
phar load total:0.004680871963501s
phar execution 10000 total:0.00016689300537109s
10,000 回実行 クラスメソッド、オブジェクトインスタンスとオブジェクトメソッド、および関数メソッドの合計消費時間は 0.17 ミリ秒です。
src 実行効率
localhost:phar ugg$ php test_src_functions.php 
phar load total:0.0029089450836182s
phar execution 10000 total:0.00019693374633789s
localhost:phar ugg$ php test_src_functions.php 
phar load total:0.0028579235076904s
phar execution 10000 total:0.0002140998840332s
localhost:phar ugg$ php test_src_functions.php 
phar load total:0.0029168128967285s
phar 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 までご連絡ください。