Last active
June 23, 2019 18:58
-
-
Save rmm5t/2338e78d6516360a002616a6693ac8c4 to your computer and use it in GitHub Desktop.
Benchmark enumerator patterns
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'benchmark' | |
array = (1..1000).to_a | |
n = 1000 | |
Benchmark.bmbm do |x| | |
x.report("lazy") { n.times { array.lazy.select(&:even?).map { |i| i / 2 }.to_a } } | |
x.report("double-pass") { n.times { array.select(&:even?).map { |i| i / 2 } } } | |
x.report("nested conditional") do | |
n.times do | |
[].tap do |evens| | |
array.each do |i| | |
next unless i.even? | |
evens << i / 2 | |
end | |
end | |
end | |
end | |
end | |
# >> | |
# >> user system total real | |
# >> lazy 0.170447 0.000294 0.170741 ( 0.170932) | |
# >> double-pass 0.060291 0.001461 0.061752 ( 0.061843) | |
# >> nested conditional 0.055417 0.000347 0.055764 ( 0.055812) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'benchmark' | |
class Tray | |
def initialize(n) | |
@active = n % 3 != 1 | |
end | |
def active? | |
@active | |
end | |
end | |
tray_count = 5400 | |
trays = [] | |
1.upto(tray_count) do |index| | |
trays << Tray.new(index) | |
end | |
def do_something(tray) | |
a = 1 | |
a + 1 | |
end | |
n = 1000 | |
Benchmark.bmbm(15) do |benchmark| | |
benchmark.report("lazy") do | |
n.times do | |
trays.lazy.select(&:active?).each { |t| do_something(t) } | |
end | |
end | |
benchmark.report("double pass") do | |
n.times do | |
trays.select(&:active?).each { |t| do_something(t) } | |
end | |
end | |
benchmark.report("nested conditional") do | |
n.times do | |
trays.each do |t| | |
next unless t.active? | |
do_something(t) | |
end | |
end | |
end | |
end | |
# >> | |
# >> user system total real | |
# >> lazy 0.948223 0.001460 0.949683 ( 0.950818) | |
# >> double pass 0.486718 0.003141 0.489859 ( 0.490453) | |
# >> nested conditional 0.338364 0.000873 0.339237 ( 0.339800) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment