web-dev-qa-db-ja.com

PHP include():ファイルサイズとパフォーマンス

経験の浅いPHP質問:

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

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

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

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

37
Tom

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

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

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


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

43
Pascal MARTIN

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

編集-

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

15
James Butler

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

1
ggiroux