2013-02-10 41 views
4

我必須分解成諧音一個相當大的響應查看誰結構看起來像這樣,其中*表示此部分加載不止一次:隨機軌道諧音慢100倍,比預期

show
-responses
--response*
---comments
----comment*
---comment_form
-stats

我的問題是取決於頁面的大小,這些部分中的大部分需要10-20ms才能渲染,但是這些部分中的幾個需要800-1000ms的渲染。似乎沒有一種模式,即使我快速刷新並且通常不刷新,模式也是如此。

+0

假設你在MRI正在測試,我會認爲這是GC。 – phoet 2013-02-10 11:48:46

+0

@msaspence當你不使用部分時會發生什麼,總體時間會大大減少 – Viren 2013-02-10 12:30:54

+0

是的,如果我不使用partials,整體時間會急劇減少,大概是這些異常部分負載增加的量。這對我來說不是一個好選擇,因爲它是一個大視圖文件,我很快就會在其他視圖中使用這些部分。 我正在使用mri,有什麼我可以做的,以減輕GC的成本? – msaspence 2013-02-10 16:04:58

回答

0

首先使用

<%= render partial: 'partial', collection: @collection, as: c %>

而不是

<% @collection.each do |c| %> 
    <%= render partial: 'partial', locals: { c: c } %> 
<% end %> 

這是顯而易見的,我不知道爲什麼我沒有這樣做。提供了一些改進,但數量不是很大。

如果你正在運行1.9.3正在增加,這些環境變量所做的巨大差異,敲約20%的要求:

RUBY_HEAP_MIN_SLOTS=600000 # This is 60(!) times larger than default 
RUBY_GC_MALLOC_LIMIT=59000000 # This is 7 times larger than default 
RUBY_HEAP_FREE_MIN=100000 # This is 24 times larger than default 

通過:http://www.web-l.nl/posts/15-tuning-ruby-s-garbage-collector-with-rvm-and-passenger

+1

更改Ruby GC參數以改善您的表現並不能回答您的問題:即使它在您的計算機上做得更好,它也不會在很多情況下出現,就好像您在說「如何花費更多錢?嘗試從取款機提取更多錢「 – 2014-06-10 15:08:10