当前位置:  开发笔记 > 后端 > 正文

配置导轨控制器动作

如何解决《配置导轨控制器动作》经验,为你挑选了3个好方法。

在Ruby on Rails中分析控制器操作的最佳方法是什么.目前我正在使用蛮力的方法在puts Time.now我认为将成为瓶颈之间投入电话.但这感觉非常非常脏.必须有一个更好的方法.



1> Rob Davis..:

我一会儿拿起这种技术,发现它非常方便.

当它就位时,您可以添加?profile=true到任何命中控制器的URL.您的操作将照常运行,但不会将呈现的页面传送到浏览器,而是发送一个详细的,格式良好的ruby-prof页面,显示您的操作花费时间的位置.

首先,将ruby-prof添加到您的Gemfile中,可能在开发组中:

group :development do
    gem "ruby-prof"
end

然后在ApplicationController中添加一个around过滤器:

around_action :performance_profile if Rails.env == 'development'

def performance_profile
  if params[:profile] && result = RubyProf.profile { yield }

    out = StringIO.new
    RubyProf::GraphHtmlPrinter.new(result).print out, :min_percent => 0
    self.response_body = out.string

  else
    yield
  end
end

阅读ruby-prof输出有点艺术,但我会将其作为练习.

ScottJShea补充说明: 如果您想更改测量类型,请执行以下操作:

RubyProf.measure_mode = RubyProf::GC_TIME #example

if应用程序控制器的配置文件方法之前.您可以在ruby-prof页面找到可用测量的列表.在撰写本文时memory,allocations数据流似乎已损坏(请参阅缺陷).


对于任何人来说,你还需要在ApplicationController的顶部添加"require'ruby-prof'".另外,对我来说,我不得不将"self.response_body ="改为"self.response.body ="(Rails 2.3.14)

2> Chris Bunch..:

使用Benchmark标准库和Rails中提供的各种测试(单元,功能,集成).这是一个例子:

def test_do_something
  elapsed_time = Benchmark.realtime do
    100.downto(1) do |index|
      # do something here
    end
  end
  assert elapsed_time < SOME_LIMIT
end

所以在这里我们只做100次,通过Benchmark库计时,并确保花费的时间少于SOME_LIMIT.

您还可以找到这些链接有用:Benchmark.realtime引用和Test :: Unit引用.此外,如果您正在阅读"书籍阅读"的内容,我会从Agile Web Development with Rails中获取该示例的想法,其中讨论了所有不同的测试类型和一些性能测试.


这个答案告诉你如何确保你的行动足够快.它无法帮助您进行分析,这可以找出动作的哪一部分花费的时间最多.

3> Stuart..:

有关于分析的Railscast非常值得关注

http://railscasts.com/episodes/98-request-profiling

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有