-
-
Save amalagaura/02c8f8ca0cd4c9d9ceb2 to your computer and use it in GitHub Desktop.
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' | |
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