2017-06-12 33 views
3

我不确定这是否是一个Rails特定问题,因此我也将其标记为rubyRails 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) 
+0

当你渲染一个部分它首先编译html。在第一次这发生'events.length'次,在第二次它只发生一次。这种情况(循环速度较慢)也发生在Rails的其他地方,比如DB查询。它被称为“N + 1” –

回答

3

示例1: 您正在渲染x次(取决于事件)。这意味着你要编译html x次(每次循环运行一次)。这是缓慢的

例子2: 要渲染一个部分与HTML编译一次事件 的集合(因为只有一个部分)。这是很快的

相关问题