Doctrine2の最適化とハッキングは簡単な作業ではありません。公式の「ベストプラクティス」に従うようにアドバイスすることしかできません。
- クエリキャッシュを使用する
- メタデータキャッシュを使用する
- 事前生成プロキシ
- リスナーを避けます(またはイベントタイプ(フラッシュ、更新)でそれらをマージします。これにより、サブスクライブされたイベントのルックアップ時間とループが回避されます)
- 可能な場合は常に遅延読み込みを使用してください
- あなたの関係や継承が台無しにされていないことを確認してください
(アプリケーションを最適化する方法ではないはずの結果キャッシュについては触れなかったことに注意してください)
私の使用から、最適化する必要があった最も重要な部分はDoctrine自体ではなく(コアに対して行う最適化があります)、生成されたクエリは、いつものようにEXPLAIN
、クエリと最適化されたインデックスを編集しました。
Doctrine 2はメモリを大量に消費する可能性があるため、一度に多数のエンティティをロードするとアプリケーションの速度が低下する可能性があります。メソッドについて知っておくと便利ですclear()
。detach()
iterate()
Doctrine 2は時々遅くなる可能性があるという事実にもかかわらず、私はほとんどの場合、ZendFrameworkまたはPHP自体のどこかでアプリケーションを最適化できたことに気づきました。
たとえば、Doctrine 2は100ミリ秒かかりますが、Zend Frameworkは300ミリ秒かかり、合計で450ミリ秒かかります(I / Oスタッフ、PHP内部関数など)。
Zend Frameworkにかかる時間を2で簡単に割ることができる場合、Doctrine 2を10%程度に最適化しても、アプリケーションの速度はそれほど向上しません。よく考えてください。
ここにいくつかのヒントがあります:
- ビューヘルパーを使用する代わりに、独自のビューを作成します(ヘルパールックアップを回避します)
- Zend_Configオブジェクトをキャッシュします(非常に重い負荷)
- 可能な限り正規表現ルートを避けてください(ZFルートは大きなボトルネックです)
- ネイティブのZend_Loader_Autoloaderの代わりにClassMapオートローダーを使用する
実行する最適化はたくさんありますが、実際に影響を与えるものとそうでないものがあります。
アプリケーションをプロファイリングしてそれらを見つけてください。簡単でクロスプラットフォームなのはwebgrindを使用することです。