まず、両方の呼び出し (require_once と include_once) で、ファイルが以前にインクルードされていないかどうかを再確認します。
したがって、両方がこれを達成する方法は、利用可能なすべてのパスでファイルを検索し、以前にミックスされていないかどうかを基本的に確認することです..
バックグラウンドで、すべての異なるオプション (複数の include_path など) を評価し、この省略形から実パスを作成することで、一意の識別子を作成します。同じパスは 2 つではなく、1 つだけです。
これは地球上で最速のプロセスではなく、通常、PHP の各リクエストで発生します。次に、別の高価な操作を追加します。これは、ファイルが存在するかどうかを確認するために、私が realpath と呼んだもの (realpath() が行うことの一種であるため、realpath) を作成するときの統計です。
間違っている場合は訂正してください。ただし、APC には特にこの場合の最適化があります。
とにかく、require_once と include_onceの違いについて説明します。これは、require_once がファイルをインクルードするときに (低レベルの解析エラーなどについて) ファイルを評価することです。これは、解析エラーがインクルードに忍び込むことがないように十分な QA が整っている場合は、取り除くことができる追加のチェックです。
それ以外の方法を見つけるのは難しいです。:-)
(考慮すべき点: require_once で開発し、デプロイ時にすべての呼び出しを include_once に置き換えることができます。)
オペコードキャッシュについては、APCをお勧めします。以前にstackoverflowで議論されました。個人的には、しばらくの間それを使用しており (3 つのフロントエンドと 1 つのバックエンドで 1 日あたり約 10 万人の訪問者を処理しています)、非常に満足しています。APC は、require_once/include_once の狂気に対しても最適化されています。
非常にクールな副作用として、APC では PHP 変数をメモリに格納することもできます (一種の永続化など)。
いくつかの追加のポインター:
- 多くの人が__autoloadを使用してアプリケーションを高速化すると主張しています。
- オペコード キャッシュでは、条件付きの require_once/include_once を回避します (たとえば、ループまたは制御フロー内)。
- /absolute/path/to/file.php を include_ または require_once に指定した方が、include_path に依存するよりも高速であると言う人もいます。
- include_path 内のパスの順序も重要です。
それが役立つことを願っています。