Rails Partial(Rails 3,HAML)任意慢

我使用的是Rails 3.0.1,HAML 0.3.22和Mongrel 1.1.5(以及MongoMapper而不是AR)。 我正在渲染一个列表,每个列表项都是它自己的部分。 每次页面渲染时,其中一个列表项部分需要花费几乎100倍的时间来渲染(并且每次都是一个任意不同的。另外,不用说,每个项目基本上都有相同的数据)。

知道这里发生了什么吗? 我应该将逻辑移动到块而不是部分吗?

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) 

每个部分6毫秒似乎太高但它真的取决于你在部分内部做什么(任何SQL查询吗?)

至于500毫秒的事情我在我的应用程序中注意到了相同的行为。 我花了一些时间在里面挖掘。 好吧(在我的情况下)它真的是Ruby垃圾收集器。

当您可以对垃圾收集器进行微调时,可以使用REE(例如http://www.coffeepowered.net/2009/06/13/fine-tuning-your-garbage-collector/ )。

您可以使用这些数字,看看您的应用程序的行为是否会发生变化。 如果是这样,那么就责怪GC。

如果你把它放到一个部分中,它可能会更快吗?

我的意思是把它放进去

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

部分,称为1次..而不是1000次……

放入.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)。