2012-02-17 15 views
0

Rails 2では、Webページのパフォーマンスをゆっくりと最適化しようとしています。1つのモデルから別のモデルへのRails 2呼び出しが遅い

モデル内のステートメントの実行時間を計時し、データベースアクセスがまったくないように見えるにもかかわらず、あるモデル内から別のモデルへの呼び出しに驚くほどの時間がかかることがわかりました。

具体的には、遅いモデルは部門で、Department.expendituresを計算しています。支出方法では四半期が終了し、その情報が異なるモデルにあるかどうかを知る必要があります。

Department.expendituresがQuarter.closedを初めて呼び出すと、データベースアクセスがあり、私はそれを受け入れることができます。しかし、モデルメソッドの中でそれを記憶に残すために何かをやったので、Quarter.closedへの将来の呼び出し?データベースアクセスはありません。 Quarter.closedのコードは?現在は約4マイクロ秒で動作しますが、Quarter.closedを呼び出すだけですか?費用は400マイクロ秒で、何百もの部門があり、それが合計されます。

グローバル変数の中にQuarter.closedの値をキャッシュすることはできましたが、それは毛がかったようです。誰が何が起こっているか知っていますか、より良い方法についての示唆を持っていますか?

答えて

0

これが問題に当てはまる場合は100%ではありません。しかし、多くの場合、同様のローディング時間の問題があるため、積極的なローディングが問題を解決します。私は少しRailsの2構文の外だ

Department.all(:include => :expenditures) 

:あなたはこのようにそれを行うだろう。 Railsでは指定できる3は非常にこのように詳細に含まれています

Category.includes(:posts => [{:comments => :guest}, :tags]).find(1) 

と思う(しかし、わからない):

Department.all(:include => [:expenditures => [:quarters]]) 
:だから多分これが動作するときと同じ構文 に許可レール2内のオプションを含めます

(arra/hash構文を組み合わせた実験が必要な場合もあります)

関連する問題