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

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

WBOY
WBOYオリジナル
2016-07-13 10:56:26895ブラウズ

PHP プログラマーが最もよく使用する 2 つの関数は、require_once と include です。これらの 2 つの関数を通じて、他のクラス ライブラリで定義されたクラスなどのオブジェクトを使用できます。しかし、多くの人は、同じディレクトリ内の他のファイルをインクルードするときに、単に次のコードを使用してファイルを参照します:

パフォーマンスを含める

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

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');
コードをコピー

オートロードとインクルードのパフォーマンス比較
たとえば、次の 4 つのスクリプトがあります:

コードは次のとおりです#file:include1.php include 'include2.php';

当执行script1.php时, include ‘include2.php’; 这行代码被执行了一次。而执行script2.php时,这行代码被执行了两次。
这里只是一个简单的例子,在实际的项目中,include2.php被include的次数可能更多。这样反复的include,是否会影响性能呢?为此我写了个脚本来测试。

コードをコピー
//@todo something#file:include2.php
//@todo something#file:script1.php
include 'include2.php';
//@何かをする
#ファイル:script2.php
include 'include1.php';
「script1.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秒。
如果我们用autoload实现呢?

 代码如下 复制代码

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

在这段代码中,我定义了__autoload函数,几乎一样的脚本,当$loop为1时,耗时0.0002131462097168秒,而当$loop为1000时,耗时仅为前面代码的1/7,0.012391805648804秒。
但请注意看SimpleClass的代码,其中输出了一行字符串,如果去掉这行输出后再比较,会是什么样的结果呢?
在$loop同为1000的情况下,前者耗时0.057836055755615秒,而使用了autoload后,仅仅0.00199294090271秒!效率相差近30倍!
从上面的测试可以看出,当文件仅仅被include一次,autoload会消耗稍微多一点的时间,但如果在文件被反复include的情况下,使用autoload则能大大提高系统性能。
至于是否要使用autoload来解放程序员,这就仁者见仁,智者见智了。在我看来,条件允许的前提下,牺牲这一点性能(某些情况下,甚至可能是提升性能)更为便捷的开发,是值得的。


include()和require()性能


对include()来说,在 include()执行时文件每次都要进行读取和评估;

而对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句)。

这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。

另一方面,如果每次执行代码时相读取不同的文件,或者有通过一组文件叠代的循环,就使用include(),

因为可以给想要包括的文件名设置一个变量,当参数为include()时使用这个变量。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632183.htmlTechArticlePHP程序员最常用的两个函数莫过于require_once和include了,通过这两个函数,我们可以使用其他类库中定义的类等对象。但很多人在使用包含相...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。