最近Doctrine 2 ORMをCodeIgniter 2に統合しました。私はDoctrine 2をライブラリとして設定し、CodeIgniterで自動ロードしました。ページ内で次のようにdoctrineエンティティマネージャをインスタンス化します。Doctrine 2 EntityManagerが最初のリクエストで時間を失う
private static $em = null;
public function __construct() {
parent::__construct();
$this->em = $this->doctrine->em;
}
次に、必要に応じてEntity Managerを使用し始めます。私が持っている問題は、各ページのリクエストでEntity Managerが初期化に時間がかかっていることです(appr。1秒)。これにより、ユーザーはページがロードされるまで待つことになります。あなたはいくつかのパフォーマンスの結果を見ることができるの下には私が測定:
BENCHMARKS
Loading Time: Base Classes 0.0166
Doctrine 0.0486
GetArticle 1.0441
Functions 0.0068
Controller Execution Time 1.1770
Total Execution Time 1.1938
をGetArticle機能がbasicly EntityManager->見つける()呼び出します:
$currentart = $this->em->find('Entities\Article', $artid);
を私が使用している場合でも、1秒を待たなければなりませんEntityManager-> createQuery()メソッド。
すべてのページで、EntityManagerの最初の要求のために約1秒の時間があります。
これは一般的ですか?
これは、EntityManagerがDBへの接続を確立する必要があるという事実から来ていますか?最初のリクエスト後の関数/リクエストは非常に高速です。
にあります。こんにちは、ありがとうございます。残念ながら、私はあなたが送ったリンクからすでに内容を読みました。そしてあなたが指摘したように私はすでにApcCacheも使用しています。 ApcCacheを使用していても、各リクエストにメタデータがロードされているように見えます。 もう1つの興味深い点は、ApcCacheとArrayCacheの間にパフォーマンスの違いは見られないということです。これまでに読んだ記事では、ApcCacheを使用するとアプリケーションのパフォーマンスが向上すると期待しています。 私のApcCacheが正しく設定されていない可能性がありますか?あるいは、私はlocalhostで自分のアプリケーションを開発しているのでしょうか? –
どこに次のコードを記述しますか?$ em-> getMetadataFactory() - > getAllMetadata(); また、事前にorm:generate-proxyでProxyクラスを生成しています。だから問題は別の場所になければならない。 –
ApcCacheを使用するには、APCをインストールし、PHPで正しく動作することが必要です。 phpinfo()が実際に動作していることを確認してください。 –