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」 –