2010-10-24 73 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更快)。