x無法存取,你可能沒有權限或未登入。
009994c3985985809d2d644bd49aa1c2

在 View 的迴圈裡用 scope 會有效能問題嗎?

2011-12-23 09:57:04 +0800lulalalaRuby on Rails 節點 中發起
最後由 lulalala2012-02-02 09:45:28 +0800回應 , 370次閱讀

我有這樣的關連: 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)?

截至 2012-02-02 09:45:28 +0800,共收到 6 條回應
Ff7afae5b23125e25e18ad8c0404bd78
hechian 1樓, 於2011-12-23 14:41:42 +0800回應

這些是固定資料嗎?
如果是的話,只要做一次然後cache起來就行了吧?

009994c3985985809d2d644bd49aa1c2
lulalala 2樓, 於2011-12-23 18:02:42 +0800回應

不固定會變動

19e786a2a74377ff6e052d87fd8d1fa8
xdite 3樓, 於2011-12-23 23:54:13 +0800回應

當然會有 performance 問題,不要在 view 裡面下 query 啊。

請用 cells 包裹。http://blog.xdite.net/posts/2011/12/04/misunderstanding-about-render/

009994c3985985809d2d644bd49aa1c2
lulalala 4樓, 於2012-01-31 10:02:30 +0800回應

嗨,我寫了一個簡單的測試(http://github.com/lulalala/benchmark) ,有兩個動作,一個是在view裡面呼叫排序的 scope ,另一個是在 controller 裡面呼叫。用

rake test:benchmark

測試。結果發現兩者沒有什麼差別。

Benchmark 應該是把 view 跟 controller 合在一起測試,所以應該沒有測錯吧。也許呼叫 scope 不算是 view 中的 query ,所以沒有效率問題?

6b3a9e760dc41f48e4a215a0aacacc02
jamesy829 5樓, 於2012-02-01 18:21:45 +0800回應

最好不要把logic放在view裡面,讓controller handle那些query在pass那個object

009994c3985985809d2d644bd49aa1c2
lulalala 6樓, 於2012-02-02 09:45:28 +0800回應

因為 logic 在 loop 中,所以在 controller 使用就必須預先抓出成陣列然後手動一個個整理,程式碼變複雜。

而這個情況只是呼叫 scope 所以我覺得這個算是 logic in view 的特例?

需要 登入 後方可回應,如果你還沒有帳號按這裡 註冊