2011-03-26 75 views
3

第一代码:导轨3减缓局部渲染

# matches/index.html.haml 
%ul.match_list 
- @matches.each do |match| 
    %li 
    =render match 
# matches/_match.html.haml 
%li 
    =match.id 
Completed 200 OK in 665ms (Views: 496.3ms | ActiveRecord: 142.1ms) 

缓慢的地狱。

二码:

# matches/index.html.haml 
%ul.match_list 
- @matches.each do |match| 
    %li 
    =match.id 
Completed 200 OK in 196ms (Views: 30.0ms | ActiveRecord: 134.6ms) 

好多了。

为什么在不使用偏色时会快得多?

+0

对不起,我第一次发表评论时看不到结果。 – sosborn 2011-03-26 13:03:09

+0

开发或生产模式? – 2011-03-26 13:20:36

+0

它的开发模式,在生产模式下运行的产品 – methyl 2011-03-26 13:56:22

回答

9

您是否在开发模式下运行?我不知道Rails的内部工作原理,但我知道它在生产环境中缓存视图代码,而它在开发中重新读取文件。如果它在请求的持续时间内缓存视图会很好,但它可能不会,这可能是问题。

此外,而不是遍历的比赛,试着给下面的一抡:

= render @matches 

这绝对是更简洁,而且,问题是否再次读取该文件,它可能是Rails的可能优化该过程是否知道你将要循环。

+8

'render(:partial =>'match',:collection => @matches)'是指定这个的更正式的方法,并且比独立运行一堆'render'调用要快。由于你引用的原因,生产模式也比开发模式快得多。 – tadman 2011-03-26 17:34:26