我想比较执行时间
Post.all
和SELECT * FROM posts
(或其他一些语句)我如何获得Post.all
的执行时间?
Benchmark
模块:
timing = Benchmark.measure { Post.all }
提供了返回对象(Benchmark::Tms)的各种属性here:
cstime
:孩子的系统CPU时间cutime
:孩子的用户CPU时间label
:标签real
:经过的实时时间stime
:系统CPU时间total
:总时间,即utime + stime + cutime + cstimeutime
:用户CPU时间如果要比较多个测量值,可以使用
Benchmark.bm
或 Benchmark.bmbm
:
Benchmark.bm do |x|
x.report("Post.all") { Post.all }
x.report("Measurement.all") { Measurement.all }
end
这将报告每次运行所花费的时间,以便您可以比较它们。
使用 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
这是我的如何使用 gem 在 Rails 控制台中自动测量性能的版本:https://github.com/igorkasyanchuk/execution_time
它显示了您在请求期间已经看到的类似信息。
样品:
[METRICS] Completed in 908.3ms | Allocations: 2894 | ActiveRecord: 0.9ms (queries: 13)