4

在我看來,我渲染了一個局部。這實際上是一個顯示在表格中約500-600次的行元素。我渴望加載所有關聯。 但是,問題在於,相同的部分會在某些時候突然產生不同的渲染時間。Rails局部需要太多時間渲染有時

我的Rails服務器O/P:

Rendered admin/invoices/_update.html.erb (1330.3ms) 
Rendered admin/invoices/_update.html.erb (4.8ms) 
Rendered admin/invoices/_update.html.erb (4.8ms) 
Rendered admin/invoices/_update.html.erb (8.8ms) 
Rendered admin/invoices/_update.html.erb (4.4ms) 
Rendered admin/invoices/_update.html.erb (1309.9ms) 
Rendered admin/invoices/_update.html.erb (4.7ms) 
Rendered admin/invoices/_update.html.erb (4.6ms) 
Rendered admin/invoices/_update.html.erb (4.6ms) 
Rendered admin/invoices/_update.html.erb (1322.6ms) 
Rendered admin/invoices/_update.html.erb (4.2ms) 

而且,沒有特別的一行需要更長的時間每次。

在我看來文件:

<% @updates.each do |update| %> 
<%= render :partial => 'update', :locals => {:user => update[0]} #each of this is a row %> 
<% end %> 

UPDATE: 同時建議,如果這是一個很好的辦法做到這一點?即:多次循環部分。我無法使用分頁和Ajax來加快速度。任何其他方法。?

回答

4

雖然我不確定渲染中爲什麼會出現滯後尖峯,但我強烈推薦顛倒順序:您將所有更新都提交給partial,並在其中迭代並渲染行。

鑑於文件

<%= render :partial => 'update', :locals => {:updates => @updates} %> 

以及更新部分

<% updates.each do |update| %> 
     RENDER LOGIC 
    <% end %> 

這爲什麼你不吃虧的部分負載開銷在更新每一行內。希望這可以幫助!

+0

嘿,謝謝你。我試過了,渲染速度立即下降了大約15% - 20%。但仍然無法理解這些不規則尖峯的原因。 – Nerve

+0

您是來自開發環境的結果嗎?請記住,在生產中,視圖代碼被緩存,所以也許其他建議可能會更有意義的性能。嘗試在生產環境中進行基準測試,因爲那些渲染時間最終會變得重要。 – CristianDonosoC

+0

啓用資產流水線,預編譯資產和哇,頁面在那裏拍攝!快速閃電!謝謝。 – Nerve

6

部分對渲染集合非常有用。當你通過傳遞一個集合的部分:收集選項,部分將用於集合中的每個成員被插入一次:

<%= render :partial => 'update', :collection => @updates %> 

也有這個的簡寫。假設@updates被更新實例的集合,你可以簡單地在index.html.erb寫這篇文章,以產生相同的結果:

<%= render @updates %> 

Section 3.4.5 of the Rails Guides詳細解釋這一點。