【问题标题】:Random rails partials 100 times slower than expected随机 rails partials 比预期慢 100 倍
【发布时间】:2013-01-25 14:22:07
【问题描述】:

我有一个相当大的响应视图被分解成结构看起来像这样的部分,其中 * 表示这个部分被多次加载:

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

我的问题是,根据页面的大小,这些部分中的大多数需要 10-20 毫秒来呈现,但是其中一些部分需要 800-1000 毫秒来呈现。似乎没有一种模式,如果我快速刷新并且经常不刷新,通常会有相同的模式。

【问题讨论】:

  • 假设你在做 mri 测试,我会认为这是 GC。
  • @msaspence 当你不使用 partial 会发生什么,整体时间会大幅减少
  • 是的,如果我不使用 partials,总时间会大大减少,大约是这些异常部分负载添加的数量。这对我来说不是一个很好的选择,因为它是一个大视图文件,我几乎可以肯定很快就会在其他视图中使用局部视图。我正在使用 mri,有什么办法可以降低 GC 的成本吗?
  • 感谢@Viren 指点我GC,在这方面做了很多阅读,现在更好地理解了这个问题。

标签: ruby-on-rails ruby-on-rails-3 templates rendering


【解决方案1】:

首先使用

<%= 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

【讨论】:

  • 更改 Ruby GC 参数以提高您的性能根本无法回答您的问题:即使它在您的机器上做得更好,但在很多情况下不会,就好像您正在说“如何花更多的钱?尝试从自动取款机中提取更多的钱”
猜你喜欢
  • 2015-09-07
  • 2021-04-12
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多