Skip to content

Instantly share code, notes, and snippets.

@evanphx
Created April 10, 2011 23:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save evanphx/912835 to your computer and use it in GitHub Desktop.
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

dhh commented Apr 11, 2011

Where are you seeing the 2x? I'm seeing 23% and 28% respectively. Also, from Rails 3.1 forward, I consider Ruby 1.9 to be the primary Ruby and the 1.8 to just be a legacy option we continue to support until Rails 4.

@evanphx
Copy link
Author

evanphx commented Apr 11, 2011

0.85 vs. 1.73 is where I was indicating the 2x.

@dhh
Copy link

dhh commented Apr 11, 2011

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

@evanphx
Copy link
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

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
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