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

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

不言
不言オリジナル
2018-05-31 14:30:351926ブラウズ

この記事は主に PHP アーカイブ phar のパフォーマンス テストを紹介します。これを必要な友人に共有します。

PHP には 5.3 から PHAR アーカイブが追加されました。 Java ™ テクノロジー。アプリケーションの実行に必要なものがすべて含まれた単一のファイルを使用してアプリケーションをパッケージ化できます。このファイルは、実際にはコンパイルされたアプリケーションではなくアーカイブ ファイルであるという点で、通常 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、for.php、functions.php、datesテストファイルクラスメソッド、for.phpテストを含むスタブファイルですオブジェクトメソッド、関数.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.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(&#39;12345&#39;);
    }   
    $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

クラスメソッド、オブジェクトインスタンス、オブジェクトメソッド、関数メソッドを10000回実行し、合計の所要時間は 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% 実行速度が速い具体的な理由。のpharメソッドは見つかりませんでした。インターネット上にいくつかの情報があります。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 アーカイブ phar のパフォーマンス テストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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