2009-07-11 6 views
4

xdebugプロファイラでコードを実行し、30%以上の時間がrequire()呼び出しに費やされました。これを改善する最善の方法は何ですか?私は__autoloadの使用に関するいくつかの記事を見ましたが、APC(これは私たちが使用している)への影響についての矛盾した声明がありました。PHPのパフォーマンスがrequire()によって妨げられました

+0

代わりにinclude()を試しましたか? –

+0

はrequire()のinclude()のハードフェイルバージョンではありませんか? – bob

+0

理論上、はい。私はそれが巨大な影響を与える可能性があるかどうか、疑問に思ったコメントではなく、答え: –

答えて

3

時間を消費する理由は、ディスクのIO速度です。実際に使用されていないファイルが必要な場合があるので、オートローディングを試すことができます。ディスクIOオーバーヘッドを減らすもう1つの方法は、PHPファイルを1つの大きなファイルに結合することです。常に必要なコードを含む大きなファイルを要求することは、複数の小さなファイルに同じコードを含めるよりも高速です。

また、APCには、有効化を試すことができるapc.include_once_overrideという機能があります。

+0

あなたはapc.statを参照していますか? – bob

+0

これはapc.include_once_overrideです –

0

あなたのインクルードパスにはいくつのアイテムがありますか?あなたのアプリケーションに合った場所の順序ですか?相対パスを使用している場合は、インクルードファイルを探すためインクルードパスの場所をチェックします。

2

インクルードに、相対パスの代わりに絶対パスを使用するようにしてください。これを行う最も簡単な方法は、あなたがhttp://eaccelerator.net/のように、PHPのコンパイラを使用して、コードの速度を向上させることができ

dirname(__FILE__) // for php < 5.3 
__DIR__   // for php >= 5.3 
1

であなたのパスを付加することです。

このようなコンパイラでは、すべての処理が高速化され、ファイルも含めて処理されます。

1

APCとautoloadには一度問題がありました。それはずっと前です。一般に、APCは構文解析されたファイルをキャッシュするので、requireステートメントを高速化できます。デフォルトでは、APCはディスク上でファイルが変更されているかどうかを確認するためにファイルstatを表示します。これを防ぐには、絶対パスを使用してapc.statの設定をオフにします。これは、キャッシュをクリアするためにサーバを再起動する必要があることに注意してください。

関連する問題