渲染haml partials需要很长时间......为什么?

时间:2011-11-15 15:45:51

标签: ruby-on-rails-3 performance view haml

ruby​​ 1.8.7上的My Rails 3.0应用程序包含Haml 3.1.3。大多数视图都是haml模板,在生产模式下在我的机器上渲染它们需要大约0.5-5ms。

话虽如此,一些部分需要更长的时间。 30-60行haml 300ms至900ms。它必须是我如何使用它的方式,但我怎么能调试什么是错的?基准测试具有一致性和可重复性。

我不确定错误的可能来源:

  • 深部分筑巢? (3-5级)
  • 深仇恨筑巢? (4-8级)
  • 使用块助手?
  • 很多翻译?
  • 使用带有formtastic 2.0的haml?
  • 使用表单构建器嵌套表单?

感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

事实证明,Formtastic 2.0中有很多东西:

  • 大量对象查找,未缓存
  • 大量翻译,未缓存
  • 使用try ... rescue blocks极大地减缓了它的速度

已经向Formtastic 2.1及更高版本添加了修复,使其更快。感谢Sascha Konietzke提供补丁。

答案 1 :(得分:1)

最近解决这个问题的方法是Hamlit,这是一种高性能的Haml实现,在性能设计方面存在一些限制。声称8.24倍加速。

此外,不是特定于Haml,而是查看multi-fetch gem列表。

答案 2 :(得分:0)

很可能是垃圾收集。见这些帖子:

http://www.williambharding.com/blog/uncategorized/rails-3-performance-abysmal-to-good-to-great/comment-page-1/

http://bibwild.wordpress.com/2011/06/28/rails3-unbearably-slow-view-rendering-use-ree-with-gc-tuning/

如果您正在使用REE 1.8.7(它也修复了内存泄漏,那么您应该这样做),然后you can tune your GC settings。我上周刚刚做了这个,我们的回复时间下降了50%。

答案 3 :(得分:0)

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