【问题标题】:Rails Partial (Rails 3, HAML) arbitrarily slowRails Partial (Rails 3, HAML) 任意慢
【发布时间】:2011-04-29 18:07:19
【问题描述】:

我使用的是 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)

【问题讨论】:

  • 在这里使用部分没有错。这就是他们的目的。关于缓慢,您是处于开发模式还是生产模式?你可以从你的部分发布代码吗?此外,查看控制器和布局文件 (application.html.haml) 可能会有所帮助。你试过 newrelic 的 rpm 吗?
  • 确实:展示部分,以及如何称呼它。

标签: ruby-on-rails ruby ruby-on-rails-3 haml mongrel


【解决方案1】:

每部分 6 毫秒似乎太高了,但这实际上取决于您在部分内部做什么(那里有任何 SQL 查询吗?)

至于 500 毫秒的事情,我在我的应用程序中发现了同样的行为。我已经投入了一些时间来挖掘内部。好吧(就我而言)它确实是 Ruby 垃圾收集器。

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

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

【讨论】:

    【解决方案2】:

    如果你把它放在一个单独的部分可能会更快?

    我的意思是把它放到一个

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

    partial,也就是叫1次..而不是1000次...

    【讨论】:

      【解决方案3】:

      输入.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
      

      根据您的问题,这可能会使您的局部渲染速度更快(在我的情况下,平均渲染时间加快了 3 倍)。

      【讨论】:

        猜你喜欢
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        • 2012-06-09
        • 1970-01-01
        • 2012-12-08
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        相关资源
        最近更新 更多