2012-02-17 84 views
0

在Rails 2中,我試圖優化緩慢加載網頁的性能。Rails 2從一個模型調用到另一個模型很慢

我正在計算模型中語句的執行時間,發現從一個模型到另一個模型的調用中出現了令人驚訝的時間量,儘管看起來根本沒有數據庫訪問。

具體而言,我們說是慢的模式是部門,我計算Department.expenditures。支出法需要知道季度是否已經關閉,且該信息是在一個不同的模型,季度

第一次Department.expenditures調用Quarter.closed?有一個數據庫訪問,我可以接受。但是我已經做了一些事情以便將它保存在模型方法的內存中,以便將來調用Quarter.closed?沒有數據庫訪問權限。 Quarter.closed內的代碼?現在運行大約4微秒,但只需調用Quarter.closed?從內部部門。支出需要400微秒,並與數百個部門,這加起來。

我可以緩存全局變量裏面Quarter.closed值,但似乎有毛。有沒有人知道發生了什麼或有更好的做法的建議?

回答

0

不是100%確定這是否適用於您的問題。但是,在許多情況下,加載時間相似的情況下,預加載可以解決問題。你會做這樣的:

Department.all(:include => :expenditures) 

我有點出軌道2語法。在Rails 3,您可以指定包括比較詳細的是這樣的:

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

我認爲(但不知道)的:包括梁2選項允許類似的語法 所以,也許這會工作:

Department.all(:include => [:expenditures => [:quarters]]) 

(可能需要在這裏結合使用排列/散列語法進行一些實驗)

相關問題