Rails有时会花费太多时间来渲染

Ner*_*rve 4 renderpartial partial-views ruby-on-rails-3 ruby-on-rails-3.1

在我看来,我正在渲染一部分.这实际上是一个行元素,在表中显示大约500 - 600次.我渴望加载所有协会.但是,问题是,相同的部分需要一些突然不同的渲染时间.

我的rails服务器o/p:

Rendered admin/invoices/_update.html.erb (1330.3ms)
Rendered admin/invoices/_update.html.erb (4.8ms)
Rendered admin/invoices/_update.html.erb (4.8ms)
Rendered admin/invoices/_update.html.erb (8.8ms)
Rendered admin/invoices/_update.html.erb (4.4ms)
Rendered admin/invoices/_update.html.erb (1309.9ms)
Rendered admin/invoices/_update.html.erb (4.7ms)
Rendered admin/invoices/_update.html.erb (4.6ms)
Rendered admin/invoices/_update.html.erb (4.6ms)
Rendered admin/invoices/_update.html.erb (1322.6ms)
Rendered admin/invoices/_update.html.erb (4.2ms)
Run Code Online (Sandbox Code Playgroud)

此外,没有特定的行每次都需要更长的时间.

在我的视图文件中:

<% @updates.each do |update| %>
<%= render :partial => 'update', :locals => {:user => update[0]} #each of this is  a row %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

更新:还建议这是一个很好的方法吗?即:多次循环部分.我不能用分页和Ajax来固定东西.任何其他方法.?

Sye*_*lam 6

Partial在渲染集合时非常有用.通过:collection选项将集合传递给partial时,将为集合中的每个成员插入一次partial:

<%= render :partial => 'update', :collection => @updates %>
Run Code Online (Sandbox Code Playgroud)

还有一个简写.假设@updates是更新实例的集合,您可以在index.html.erb中简单地编写它以产生相同的结果:

<%= render @updates %>
Run Code Online (Sandbox Code Playgroud)

Rails指南的第3.4.5节详细解释了这一点.