Rails 4:为什么一种更快速渲染局部的方法呢?

Dan*_*n L 8 ruby performance partials ruby-on-rails-4

我不确定这是否是Rails特定的问题,因此我也标记了它ruby.

event通过局部渲染记录集合.但是,我发现不同地渲染局部会导致性能差异剧烈.

两个版本都使用完全相同的数据,唯一改变的是用于渲染部分的代码.

为什么heck是一个版本始终比另一个版本快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) 
...
Run Code Online (Sandbox Code Playgroud)

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

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

# Log output
Rendered events/_event.html.erb (58.7ms)
Run Code Online (Sandbox Code Playgroud)

小智 9

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

示例2:您正在使用html编译一次的事件集合呈现一个部分(因为只有一个部分).这很快