管理対象ホストのcentOSを実行していた古いサーバから、AWSのUbuntuを実行する新しいサーバに移動しました。Symfony 1.4のリストページを新しいサーバで約10秒かかります
投稿するアイテムのリストを読み込むページがレンダリングに10〜12秒かかることがある(時には最大74秒)ことがわかりました。これは古いサーバーでは気付かれませんでした。私はnewrelicを使って何がそんなに長くかかっているかを見て、sfPHPView-> render()が99%の時間を費やしていることを発見しました。 nerelicから、ページをレンダリングするために約500コールがDBにあります。
ページはアイデアのリストで、各アイデアは1行です。 Doctrine 1.2の$ idea-> getAccounts() - > getSlug()を使用します。 accountは、外部関係としてアイデアにリンクされた別のテーブルです。これは、アイデア行ごとに数回呼び出されます。現在、各行要素のコードを保持するためにパーシャルは使用されていません。
- ロー要素にpartialを使用するとパフォーマンスが向上しますか? (現在はコードのメインテナンスのメリットは無視してください)
- 外部関係を介して接続されたデータを参照するためのベストプラクティスは何ですか? $ idea-> getAccounts() - > getSlug()が呼び出されるたびに、DBに呼び出しが行われることに驚いています。
- ubuntuでは、sfPHPView-> render()がcentOSよりも遅く実行されることは明らかですか?
これは、明示的な結合について知るのに非常に便利な@j0kです。だから私はこれを行う:$ q = Doctrine_Query :: create() - > from( 'Ideas I') - > where(some criteria) - > leftjoin( 'I.Account') - > execute();アカウントデータが明示的に含まれますか? sfPHPView-> renderFile()の他のスピードアップについて知っていますか? –
あなたが明示的に追加すると、leftJoin Doctrineは結果を各行のアカウントデータでハイドレーションします。私は 'renderFile'のために他のスピードアップを知らない。 – j0k