ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルの inlcude() パフォーマンス比較の詳細な説明

php_PHP チュートリアルの inlcude() パフォーマンス比較の詳細な説明

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

include パフォーマンス

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

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' ファイルを見つけるようにシステムに指示するのと同じです。

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




コードをコピーします

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


define(' APP_PATH' ,realpath(dirname(_FILE_)));
これは、後で特定のパスにあるファイルを参照する必要がある場合に、システムにグローバル変数を追加するのと同じです。次のコードを使用します:
コードをコピーします

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


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

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


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


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


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




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


#file:SimpleClass.php
class SimpleClass {
public function __construct() { echo get_time() "rn" } } #file: php_include.php
for($i = 0;$i < $loop;$i++) {
include_once "SimpleClass.php";
new SimpleClass()

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


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




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


#file:php_autoload.php
function __autoload($class_name) { include_once $class_name .php'; = 0;$ i new SimpleClass()

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

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

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

include() と require() のパフォーマンス

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

http://www.bkjia.com/PHPjc/325979.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/325979.html技術記事インクルードのパフォーマンス コピー コードは次のとおりです: include('include.php'); もちろん、この方法に問題はありませんが、次の方法よりもわずかに効率が低くなります。 コードのコピーは次のとおりです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。