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

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

Jul 13, 2016 am 10:56 AM
once php require 関数 比較した パフォーマンス 使用 プログラマー 詳しい説明

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

See all articles