在 View 的迴圈裡用 scope 會有效能問題嗎?
我有這樣的關連: Region has_many Countries,要作個頁面顯示他們全部。
<% regions.each do |region| %>
<% region.countries.order_alphabetically.each do |country| %>
...
<% end %>
<% end %>
我用了一個專門排序的 scope ,不過還在想要不要在 controllers 裡面先全部排序好放在一個 nested array 裡面。
我在 stackoverflow(http://goo.gl/uXZfu) 上問,回答是:「There's no performance difference between the controller and the view. The same code needs to execute regardless of where it is.」
還有想問一下通常要測試 view render 的方法是如何呢?因為不能重複 render ,所以必須重複呼叫 controller 幾千次然後計算時間囉(預先關掉cache)?
這些是固定資料嗎?
如果是的話,只要做一次然後cache起來就行了吧?
不固定會變動
當然會有 performance 問題,不要在 view 裡面下 query 啊。
請用 cells 包裹。http://blog.xdite.net/posts/2011/12/04/misunderstanding-about-render/
嗨,我寫了一個簡單的測試(http://github.com/lulalala/benchmark) ,有兩個動作,一個是在view裡面呼叫排序的 scope ,另一個是在 controller 裡面呼叫。用
rake test:benchmark
測試。結果發現兩者沒有什麼差別。
Benchmark 應該是把 view 跟 controller 合在一起測試,所以應該沒有測錯吧。也許呼叫 scope 不算是 view 中的 query ,所以沒有效率問題?
最好不要把 logic放在view裡面,讓controller handle那些query在pass那個object
因為 logic 在 loop 中,所以在 controller 使用就必須預先抓出成陣列然後手動一個個整理,程式碼變複雜。
而這個情況只是呼叫 scope 所以我覺得這個算是 logic in view 的特例?