2010-10-24 74 views
2

我使用Rails 3.0.1,HAML 0.3.22和Mongrel 1.1.5(和MongoMapper不是AR)。我正在渲染一個列表,每個列表項都是自己的部分。每次頁面呈現列表項中的一個時,部分渲染的渲染時間將延長几乎100倍(並且每次都是任意不同的)。不用說,每個項目本質上具有相同的數據。Rails部分(Rails 3,HAML)任意慢

任何想法這裏發生了什麼?我應該將邏輯移入塊而不是局部嗎?

Rendered shared/_head.html.haml (5.6ms) 
Rendered tasks/_incomplete_task.haml (6.2ms) 
Rendered tasks/_incomplete_task.haml (6.4ms) 
Rendered tasks/_incomplete_task.haml (6.9ms) 
Rendered tasks/_incomplete_task.haml (6.2ms) 
Rendered tasks/_incomplete_task.haml (6.0ms) 
Rendered tasks/_incomplete_task.haml (6.1ms) 
Rendered tasks/_incomplete_task.haml (6.4ms) 
Rendered tasks/_incomplete_task.haml (6.2ms) 
Rendered tasks/_incomplete_task.haml (7.0ms) 
Rendered tasks/_incomplete_task.haml (531.6ms) 
Rendered tasks/_incomplete_task.haml (8.0ms) 
Rendered tasks/_incomplete_task.haml (6.8ms) 
Rendered tasks/_incomplete_task.haml (6.5ms) 
Rendered shared/_tasks.html.haml (633.0ms) 
+0

在這裏使用部分沒有錯。這就是他們的目的。關於緩慢,您是否處於開發或生產模式?你可以發佈你的偏好代碼嗎?此外,它可能有助於查看您的控制器和您的佈局文件(application.html.haml)。你是否從newrelic嘗試過rpm? – stephenmurdoch 2010-10-24 12:18:15

+0

確實:顯示部分內容,以及如何調用它。 – nathanvda 2010-10-24 13:32:43

回答

3

6毫秒似乎過高,但它實際上取決於你在做什麼部分(任何SQL查詢?)

至於500毫秒的事情,我注意到我的應用程序中的相同行爲。我已經投入了一些時間在裏面挖掘。還有(就我而言),它確實是Ruby垃圾收集器。

當您可以微調垃圾收集器時(例如http://www.coffeepowered.net/2009/06/13/fine-tuning-your-garbage-collector/),您可以使用REE。

你可以玩這些數字,看看你的應用程序的行爲是否會改變。如果是的話,那就怪GC。

-1

也許它更快,如果你把它放在一個單一的部分?

我的意思是把它變成一個

# tasks/_incomplete_tasks.haml instead of tasks/_incomplete_task.haml 

部分,這就是所謂1次..而不是1000倍......根據分

-1

放在.bashrc

export RUBY_GC_HEAP_INIT_SLOTS=1000000 
export RUBY_HEAP_SLOTS_INCREMENT=500000 
export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1 
export RUBY_GC_MALLOC_LIMIT=50000000 

來源,並重新啓動服務器

$> source ~/.bashrc 
$> rails s 

取決於你有什麼問題,這可能會使渲染你的諧音更快(在我的情況下,平均渲染時間了x3更快)。