41

経験の浅いPHPの質問:

PHPスクリプトファイルがあり、さまざまなページのさまざまな場所に何度も含める必要があります。

含まれているファイルをいくつかの小さなファイルに分割し、必要に応じてこれらを含めるオプションがあります...または...すべてを1つのPHPファイルにまとめることができます。

このコンテキストでinclude()に大きいファイルと小さいファイルを使用することによるパフォーマンスへの影響があるかどうか疑問に思っていますか?たとえば、200KBのファイルと20KBのファイルの間にパフォーマンスの違いはありますか?

ありがとうございました。

4

3 に答える 3

47

200KBと20KBのファイルには違いがあります...しかし、おそらく気付かないでしょう。200KBのファイルはそれほど大きくはありません。通常、「小さい」ではないファイルをたくさん使用します。大きなアプリケーションを構築しています。

.phpファイルをロードするとき、時間がかかることが2つあります。

  • PHPのソースコードは「opcodes」に「コンパイル」されています。これはJAVAバイトコードとまったく同じです。
    • これは、デフォルトでPHPファイルが含まれるたびに実行されます
    • しかし、APCのようないくつかのオペコードキャッシュを使用すると、それらのオペコードをメモリに保持することができ、このコンパイルは毎回実行されなくなります-これは素晴らしいことです:コンパイルが実行されなくなるため、CPUの使用量が少なくなります( 'たまにのみ実行されます)
  • オペコードが実行されます
    • スクリプトに含まれる内容によっては、時間がかかる場合とそうでない場合があります。
    • ファイルに関数またはクラス定義のみが含まれている場合、これにはそれほど時間はかかりません。何も実行されません。
    • ファイルに指示が含まれている場合は、さらに時間がかかります^^


補足として:一般的な状況では、SQLクエリを最適化する、またはキャッシュメカニズムを追加するよりも、そのようなことを考えるよりもはるかに多くの時間/CPU/リソースを得ることができます。

于 2010-02-19T17:22:04.057 に答える
15

include_once()(および にも)注意してください。require_once()実行するのに よりもコストがかかりますinclude()。が実行されるたびinclude_once()に、PHP は、ファイルをロードするかどうかを決定する前に、すでに含まれているファイルの内部インデックスに対してルックアップを行います。インデックスに含めるものが多いほど、このルックアップは遅くなります。また、可能な場合は絶対パスを使用するinclude()か、使用include_once()しようとする場合、これは相対パスよりもはるかに高速です。これは、PHP に絶対パスを計算させる必要がないためです。ggiroux が言ったように、APC のような何らかの形式のキャッシングは、莫大な報酬を獲得し、(ほとんど) 無関係なインクルード呼び出しがいくつあるかを心配させます (コードの記述が不十分でない限り)。

編集 -

上記の呼び出しについて心配することは、数千requiresまたはincludesコードベースで開始した場合にのみ問題になります。

于 2010-05-08T18:21:12.727 に答える
1

確かに影響はありますので、必ず include() の代わりに include_once() を使用してください。インクルード キャッシュを持つ APC の使用を検討することもできます。

于 2010-02-19T17:15:15.363 に答える