Skip to content

Instantly share code, notes, and snippets.

@evanphx
Created April 10, 2011 23:24
Show Gist options
  • Select an option

  • Save evanphx/912835 to your computer and use it in GitHub Desktop.

Select an option

Save evanphx/912835 to your computer and use it in GitHub Desktop.
1. benchmark
kendall :: git/rbx » ruby scratch/bm_either.rb
Rehearsal ---------------------------------------------
includes? 4.410000 0.000000 4.410000 ( 4.421223)
either? 6.450000 0.000000 6.450000 ( 6.478906)
compare 2.040000 0.010000 2.050000 ( 2.044516)
----------------------------------- total: 12.910000sec
user system total real
includes? 4.470000 0.000000 4.470000 ( 4.479386)
either? 6.520000 0.000000 6.520000 ( 6.542424)
compare 2.050000 0.010000 2.060000 ( 2.061919)
require 'benchmark'
class Object
def either?(*args)
args.include? self
end
end
count = 10000000
Benchmark.bmbm do |x|
x.report "includes?" do
count.times do
[:one, :two].include?(:one)
end
end
x.report "either?" do
count.times do
:one.either?(:one, :two)
end
end
x.report "compare" do
count.times do
:one == :one or :one == :two
end
end
end
@dhh
Copy link
Copy Markdown

dhh commented Apr 11, 2011

includes? runs in 1.4s and either? runs in 1.8s. in? runs in 1.73s.

@evanphx
Copy link
Copy Markdown
Author

evanphx commented Apr 11, 2011

Yep, totally true. Part of my original point was to challenge the idea that #include? is itself a good idea and that direct comparison should be considered if there are only 2 elements being compared with.

@dhh
Copy link
Copy Markdown

dhh commented Apr 11, 2011

Ah, I see what you mean. You consider even include? to be too slow :). But yeah, if we have anything like that in a hot spot flow, we can totally replace it with direct comparison. I'd consider that to be a pretty extreme perf optimization that I'd want solid evidence for making a big difference.

Thanks for adding some stats to the discussion, though. It's great that we now know that it's 23%/28% slower than include? and that inlining direct comparison can save you double up.

@evanphx
Copy link
Copy Markdown
Author

evanphx commented Apr 11, 2011 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment