Rails 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)

效果更好了。

为什么不使用 partial 时速度会快很多呢?


抱歉,我第一次发表评论时无法看到结果。 - sosborn
开发模式还是生产模式? - Jeff Paquette
它的开发模式,我会尝试在生产环境中。 - methyl
2
生产模式下运行是否解决了这个问题? - Kiran Ryali
1个回答

9
你是否在开发模式下运行?我不了解Rails的内部工作原理,但我知道它会在生产环境中缓存视图代码,而在开发环境中会重新读取文件。如果它能够在请求期间缓存视图,那将是很好的,但可能并没有这样做,这可能就是问题所在。
此外,尝试使用以下方法而不是循环匹配:
= render @matches

这样做肯定更加简洁,如果问题在于重复读取文件,那么如果Rails知道你要进行循环处理的话,它可能会优化这个过程。


8
render(:partial => 'match', :collection => @matches)是更正式的指定方式,比独立运行一堆render调用更快。出于你所提到的原因,生产模式也比开发模式快得多。 - tadman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接