ホームページ > php教程 > php手册 > PHPのinlcude()の性能比較を詳しく解説

PHPのinlcude()の性能比較を詳しく解説

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-13 11:58:04
オリジナル
1018 人が閲覧しました

パフォーマンスをインクルードします

コードをコピーします コードは次のとおりです:


include('include.php' );



もちろん、この方法に問題はありませんが、次の方法よりも若干効率が劣ります:

コードをコピーします コードは次のとおりです。


include(realpath(dirname(_FILE_)).DIRECTORY_SEPARATOR.'include.php');



この方法ではさらに入力する必要があるかもしれませんが、PHP エンジンが include_path を反復処理して「include.php」という名前のすべての名前を検索して対応するオブジェクトを見つける必要がある前の方法と比較して、dirname の絶対パス(__FILE__) を指定すると、システムは対応するファイルを迅速に見つけることができます。

PHP の定数 __FILE__ は、実際には C# の AppDomain.CurrentDomain.BaseDirectory に非常によく似ており、現在実行されているコードが配置されているファイルの絶対パスを返します。関数 dirname() は、その親フォルダーのパスを返します。
もう 1 つのより効率的で簡単な記述方法は include('./include.php') です。これは、現在のパスで 'include.php' ファイルを見つけるようにシステムに指示するのと同じです。

大規模なシステムでは、別のより良い方法を使用して、ルーティング ファイルやその他の初期化ファイルに次のコードを追加することがよくあります:

Copy Code コードは次のとおりです。


define('APP_PATH',realpath(dirname(_FILE_))));


これは、 system グローバル変数は、システムのルート ディレクトリを指します。後で特定のパスにあるファイルを参照する必要がある場合は、次のコードを使用できます:

Copy codeコードは次のとおりです:


include(APP_PATH.DIRECTORY_SEPARATOR.'models'.'User.php');



オートロードとインクルードのパフォーマンスの比較

たとえば、次の 4 つのスクリプトがあります。

コードをコピー コードは次のとおりです。 >

# file:include1.php
include 'include2.php';
//@todo something#file:include2.php
//@todo something#file:script1. php
include 'include2.php';
//@todo something
#file:script2.php
include 'script1.php'; //@todo something


script1.php を実行するとき、'include2.php' を含めます。このコード行は 1 回実行されます。 script2.php を実行すると、このコード行が 2 回実行されます。
これは単なる例です。実際のプロジェクトでは、include2.php がさらに複数回インクルードされる場合があります。このようなインクルードの繰り返しはパフォーマンスに影響しますか?これをテストするスクリプトを書きました。





コードをコピー

コードは次のとおりです。 #file:SimpleClass.php

class SimpleClass {

パブリック関数 __construct() {
echo get_time() . "rn";
}
}
#file:php_include.php
for($i = 0;$i < $loop;$i ) {
include_once "SimpleClass.php";
new SimpleClass()
}



$loop 値が 1 の場合、 $loop が 1000 の場合、スクリプトには約 0.00018906593322754 秒かかります。



自動ロードを使用して実装するとどうなるでしょうか?



コードをコピー

コードは次のとおりです: #file:php_autoload.php

function __autoload( $class_name ) {

include_once $class_name . '.php';
}for($i = 0;$i new SimpleClass(); 🎜>}


このコードでは __autoload 関数を定義しましたが、$loop が 1 の場合は 0.0002131462097168 秒かかり、$loop が 1000 の場合は前のコードの 1/ だけかかります。 0.012391805648804秒。
しかし、文字列の行を出力する SimpleClass のコードに注目してください。この出力行を削除して比較すると、結果はどうなるでしょうか。

$loop が両方とも 1000 の場合、前者は 0.057836055755615 秒かかりますが、autoload を使用すると、0.00199294090271 秒しかかかりません。効率の差は約30倍!

上記のテストからわかるように、ファイルが 1 回だけインクルードされる場合、自動ロードには少し時間がかかりますが、ファイルが繰り返しインクルードされる場合、自動ロードを使用するとシステムのパフォーマンスが大幅に向上します。
プログラマーを解放するためにオートロードを使用するかどうかについては、見る人や賢明な人によって異なります。私の意見では、条件が許せば、開発をより便利にするためにこのパフォーマンスを犠牲にする価値があります (場合によってはパフォーマンスが向上する可能性もあります)。

include() および require() のパフォーマンス

include() の場合、include() が実行されるたびにファイルを読み取って評価する必要があります。
require() の場合、ファイルは 1 回だけ処理されます (実際、ファイルの内容が require() ステートメントを置き換えます)。
これは、これらの命令のいずれかを含むコードや複数回実行される可能性のあるコードがある場合は、require() を使用する方が効率的であることを意味します。
一方、コードが実行されるたびに異なるファイルを読み取る場合、または一連のファイルを反復処理するループがある場合は、 include() を使用します。
ファイルの名前を設定できるためです。含めたいパラメータが include() の場合に使用される変数。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
PHP 拡張子 intl
から 1970-01-01 08:00:00
0
0
0
phpのデータ取得?
から 1970-01-01 08:00:00
0
0
0
PHP GET エラー レポート
から 1970-01-01 08:00:00
0
0
0
phpを上手に学ぶ方法
から 1970-01-01 08:00:00
0
0
0
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート