3
我不确定这是否是一个Rails特定问题,因此我也将其标记为ruby
。Rails 4:为什么一种渲染partials的方法如此之快?
我正在渲染一个集合event
记录通过部分。但是,我发现呈现不同的部分会导致性能差异很大。
两个版本都使用完全相同的数据,唯一改变的是用于渲染部分的代码。
为什么heck是一个版本一直比其他版本快4倍?让我不知道还有什么其他性能命中我走......
慢版(950ms总请求时间):
<% events.each do |event| %>
<%= render partial: "events/event", locals: { event: event } %>
<% end %>
# Log output
Rendered events/_event.html.erb (1.1ms)
Rendered events/_event.html.erb (1.1ms)
...
更快的版本(250ms的总要求时间):
<%= render partial: "events/event", collection: events, as: :event %>
# Log output
Rendered events/_event.html.erb (58.7ms)
当你渲染一个部分它首先编译html。在第一次这发生'events.length'次,在第二次它只发生一次。这种情况(循环速度较慢)也发生在Rails的其他地方,比如DB查询。它被称为“N + 1” –