Rails 4:为什么一种渲染局部的方法如此快?

Rails 4: why is one way of rendering partials so much faster?

我不确定这是否是一个 Rails 特定问题,因此我也将其标记为 ruby

我正在通过部分呈现 event 记录的集合。但是,我发现以不同方式渲染部分会导致性能差异显着。

两个版本使用完全相同的数据,唯一不同的是用于渲染局部的代码。

为什么一个版本总是比另一个版本快 4 倍?让我想知道我正在接受哪些其他性能影响...

慢速版本(总请求时间 950 毫秒):

<% 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) 
...

更快的版本(总请求时间为 250 毫秒):

<%= render partial: "events/event", collection: events, as: :event %>

# Log output
Rendered events/_event.html.erb (58.7ms)

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

示例 2: 你正在渲染一个包含一系列事件的部分 html 被编译一次(因为只有一个部分)。哪个快