Rails 3缓慢部分渲染

met*_*hyl 3 views ruby-on-rails partials ruby-on-rails-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)
Run Code Online (Sandbox Code Playgroud)

地狱慢了.

第二个代码:

# 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)
Run Code Online (Sandbox Code Playgroud)

好多了.

为什么在不使用部分时这么快?

Mat*_*chu 9

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

此外,不要循环匹配,尝试给以下一个旋转:

= render @matches
Run Code Online (Sandbox Code Playgroud)

它肯定更简洁,如果问题是重新读取文件,Rails可能会优化该过程,如果它知道你将要循环.

  • `render(:partial =>'match',:collection => @matches)`是更正式的指定方法,并且比独立运行一堆`render`调用更快.由于您引用的原因,生产模式也明显快于开发模式. (8认同)