如何在Rails控制台中获取执行时间?

117

我想比较执行Post.allSELECT * FROM posts(或其他一些语句)的时间。如何获取Post.all的执行时间?

3个回答

271
timing = Benchmark.measure { Post.all }

返回的对象(Benchmark::Tms)具有各种属性,这些属性在这里提供。


5
我发现这篇文章非常有用:http://caseyscarborough.com/blog/2013/07/22/benchmarking-your-ruby-code/ - hernanvicente
@Bohdan,是否最好添加另一个答案或评论,并提及benchmark-ips gem?您对答案进行了相当大的编辑,这显着改变了它,并且已经减少了它已有的投票的适当性。 - Shadwell
@Bohdan 点赞了。如果新答案更加合适,您也可以随时更改接受的答案。 - Shadwell
这个可行。我想知道时间单位也是秒,找到了 https://ruby-doc.org/stdlib-1.9.3/libdoc/benchmark/rdoc/Benchmark.html。 - Ankit Marothi

5
使用 benchmark-ips gem:
2.3.0 :001 > require 'benchmark/ips'
=> true 
2.3.0 :002 > Benchmark.ips do |x|
2.3.0 :003 >       x.report("add: ") { 1+2 }
2.3.0 :004?>       x.report("div: ") { 1/2 }
2.3.0 :005?>       x.report("iis: ") { 1/2.0 }
2.3.0 :006?>   end
Warming up --------------------------------------
           add:    280.299k i/100ms
           div:    278.189k i/100ms
           iis:    266.526k i/100ms
Calculating -------------------------------------
           add:      11.381M (± 4.5%) i/s -     56.901M in   5.010669s
           div:       9.879M (± 4.6%) i/s -     49.518M in   5.024084s
           iis:       9.289M (± 4.2%) i/s -     46.376M in   5.001639s

0

这是我使用 gem 在 Rails 控制台自动测量性能的版本: https://github.com/igorkasyanchuk/execution_time

它显示了与请求期间已经看到的类似信息。

示例:

[METRICS] 完成时间 908.3ms | 分配: 2894 | ActiveRecord: 0.9ms (查询: 13)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接