Created
December 2, 2017 17:59
-
-
Save luislavena/4096693021ca38f6be4c7539625716a3 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" | |
class Foo | |
getter query : String? | |
def initialize(@query) | |
end | |
def method1 | |
@query if @query && !@query.try(&.empty?) | |
end | |
def method2 | |
if (query = @query) && !query.empty? | |
query | |
end | |
end | |
def method3 | |
@query.try do |query| | |
query unless query.empty? | |
end | |
end | |
end | |
empty_query = Foo.new("") | |
with_query = Foo.new("something") | |
without_query = Foo.new(nil) | |
pp empty_query.method1 | |
pp empty_query.method2 | |
pp empty_query.method3 | |
pp with_query.method1 | |
pp with_query.method2 | |
pp with_query.method3 | |
pp without_query.method1 | |
pp without_query.method2 | |
pp without_query.method3 | |
puts "-" * 10 | |
Benchmark.ips do |x| | |
x.report("empty_query.method1") { empty_query.method1 } | |
x.report("empty_query.method2") { empty_query.method2 } | |
x.report("empty_query.method3") { empty_query.method3 } | |
end | |
puts "-" * 10 | |
Benchmark.ips do |x| | |
x.report("with_query.method1") { with_query.method1 } | |
x.report("with_query.method2") { with_query.method2 } | |
x.report("with_query.method3") { with_query.method3 } | |
end | |
puts "-" * 10 | |
Benchmark.ips do |x| | |
x.report("without_query.method1") { without_query.method1 } | |
x.report("without_query.method2") { without_query.method2 } | |
x.report("without_query.method3") { without_query.method3 } | |
end |
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
empty_query.method1 # => nil | |
empty_query.method2 # => nil | |
empty_query.method3 # => nil | |
with_query.method1 # => "something" | |
with_query.method2 # => "something" | |
with_query.method3 # => "something" | |
without_query.method1 # => nil | |
without_query.method2 # => nil | |
without_query.method3 # => nil | |
---------- | |
empty_query.method1 495.7M ( 2.02ns) (± 1.36%) fastest | |
empty_query.method2 495.59M ( 2.02ns) (± 1.27%) 1.00× slower | |
empty_query.method3 495.47M ( 2.02ns) (± 1.25%) 1.00× slower | |
---------- | |
with_query.method1 496.48M ( 2.01ns) (± 1.13%) 1.00× slower | |
with_query.method2 494.55M ( 2.02ns) (± 1.82%) 1.01× slower | |
with_query.method3 497.21M ( 2.01ns) (± 1.30%) fastest | |
---------- | |
without_query.method1 494.91M ( 2.02ns) (± 2.06%) 1.00× slower | |
without_query.method2 496.92M ( 2.01ns) (± 0.84%) 1.00× slower | |
without_query.method3 497.06M ( 2.01ns) (± 0.85%) fastest |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment