Skip to content

Instantly share code, notes, and snippets.

@amalagaura
Forked from myabc/benchmark_hashes.rb
Created December 19, 2011 16:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save amalagaura/02c8f8ca0cd4c9d9ceb2 to your computer and use it in GitHub Desktop.
Save amalagaura/02c8f8ca0cd4c9d9ceb2 to your computer and use it in GitHub Desktop.
require 'benchmark'
module Helper1
def twitterized_type(type)
case type
when :alert
"warning"
when :error
"error"
when :notice
"info"
when :success
"success"
else
type.to_s
end
end
module_function :twitterized_type
end
module Helper2
def twitterized_type(type)
{
alert: 'warning',
error: 'error',
notice: 'info',
success: 'success'
}.fetch(type, type.to_s)
end
module_function :twitterized_type
end
module Helper3
def twitterized_type(type)
{
alert: 'warning',
error: 'error',
notice: 'info',
success: 'success'
}[type] || type.to_s
end
module_function :twitterized_type
end
module Helper4
TT={
alert: 'warning',
error: 'error',
notice: 'info',
success: 'success'
}
def twitterized_type(type)
TT.fetch(type, type.to_s)
end
module_function :twitterized_type
end
module Helper5
def twitterized_type(type)
tt ||= {
alert: 'warning',
error: 'error',
notice: 'info',
success: 'success'
}
tt.fetch(type, type.to_s)
end
module_function :twitterized_type
end
n = 500000
Benchmark.bm(7) do |x|
x.report('case statement') { n.times { |i| Helper1.twitterized_type(:success) } }
x.report('hash lookup ') { n.times { |i| Helper2.twitterized_type(:success) } }
x.report('hash lookup 2 ') { n.times { |i| Helper3.twitterized_type(:success) } }
x.report('hash lookup defined once ') { n.times { |i| Helper4.twitterized_type(:success) } }
x.report('hash lookup cached ') { n.times { |i| Helper4.twitterized_type(:success) } }
x.report('when not exist: case statement') { n.times { |i| Helper1.twitterized_type(:non_existent) } }
x.report('when not exist: hash lookup ') { n.times { |i| Helper2.twitterized_type(:non_existent) } }
x.report('when not exist: hash lookup 2 ') { n.times { |i| Helper3.twitterized_type(:non_existent) } }
x.report('when not exist: hash lookup defined once ') { n.times { |i| Helper4.twitterized_type(:non_existent) } }
x.report('hash lookup cached ') { n.times { |i| Helper4.twitterized_type(:non_existent) } }
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment