Ruby on rails 配置rails控制器操作
在RubyonRails中评测控制器操作的最佳方法是什么。目前,我正在使用蛮力方法投入Ruby on rails 配置rails控制器操作,ruby-on-rails,ruby,Ruby On Rails,Ruby,在RubyonRails中评测控制器操作的最佳方法是什么。目前,我正在使用蛮力方法投入投入时间。现在,在我认为会成为瓶颈的两个调用之间进行调用。但那感觉真的,真的很脏。必须有更好的方法。使用基准标准库和Rails中提供的各种测试(单元、功能、集成)。下面是一个例子: def test_do_something elapsed_time = Benchmark.realtime do 100.downto(1) do |index| # do something here
投入时间。现在,
在我认为会成为瓶颈的两个调用之间进行调用。但那感觉真的,真的很脏。必须有更好的方法。使用基准标准库和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
def test\u do\u
已用时间=基准。实时do
100.下至(1)do |指数|
#在这里做点什么
结束
结束
断言已用\u时间<某些\u限制
结束
所以在这里,我们只需做100次,通过基准库对其计时,并确保所用时间少于某个时间限制
您还可能发现以下链接很有用:和。另外,如果你喜欢“读书”,我从中得到了这个例子的想法,它讨论了所有不同的测试类型,并介绍了一些性能测试。有一个关于评测的Railscast,非常值得一看
您可能想尝试一下这项服务,因为它确实令人印象深刻。免责声明:我与FiveRuns没有任何关联,我只是试用了这项服务 TuneUp是一项免费服务,您可以下载一个插件,当您运行应用程序时,它会在屏幕顶部插入一个面板,可以扩展该面板以显示详细的性能指标 它提供了一些很好的图表,其中一个显示了在模型、视图和控制器中花费的时间比例。如果需要,您甚至可以向下钻取查看ActiveRecord正在执行的各个SQL查询,它还可以通过再次单击显示底层数据库模式
最后,您可以选择将您的评测数据上传到FiveRuns站点,以进行社区性能分析和建议。我不久前学会了这项技术,发现它非常方便 当它就位时,您可以将
?profile=true
添加到任何命中控制器的URL。您的操作将照常运行,但它不会将呈现的页面发送到浏览器,而是发送一个详细的、格式良好的ruby prof页面,显示您的操作在哪里花费了时间
首先,将ruby prof添加到您的Gemfile中,可能在开发组中:
group :development do
gem "ruby-prof"
end
然后向应用程序控制器添加:
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#示例
在应用程序控制器的配置文件方法中的
if
之前。您可以在上找到可用测量值的列表。在撰写本文时,内存和分配数据流似乎已损坏()。这在Rails 4.2.6中起作用:
o=OpenStruct.new(logger: Rails.logger)
o.extend ActiveSupport::Benchmarkable
o.benchmark 'name' do
# ... your code ...
end
这个答案告诉您如何确保您的操作运行得足够快。它不能帮助您进行分析,即找出操作的哪一部分花费的时间最多。对于任何想要粘贴它的人,您还需要在应用程序控制器的顶部添加“require'ruby prof'”。另外,对于我来说,我不得不将“self.response_body=”改为“self.response.body=”(Rails 2.3.14),感谢这些调整<代码>响应\u body添加到Rails 3.0中。如果您使用的是bundler,则不需要ruby prof,但我很高兴这项技术能够很好地适应较旧版本的Rails。我也在使用rails 2.3.14,但很难让它正常工作。我在graph_html_printer.rb:98:in'full_name'中得到了“错误数量的参数(0代表1)”,无论我安装的是哪个版本的ruby prof。知道是什么原因导致的吗?要使其覆盖JSON、XML等的返回格式,请将其添加到if语句:
headers[“Content Type”]=“text/html”
链接已断开(DNS已过期)。这不会在日志或其他地方显示任何内容。