2017-06-12 32 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編譯一次事件 的集合(因爲只有一個部分)。這是很快的

相關問題