Skip to content

Instantly share code, notes, and snippets.

@erran-r7
Created March 11, 2015 22:22
Show Gist options
  • Save erran-r7/d3441d1e0d5050ebdcaf to your computer and use it in GitHub Desktop.
Save erran-r7/d3441d1e0d5050ebdcaf to your computer and use it in GitHub Desktop.
require 'ostruct'
require 'benchmark/ips' # gem install benchmark-ips
AGE = 21
USER = 'User'.freeze
HASH = { name: USER, age: AGE }.freeze
User = Struct.new(:name, :age)
def ostruct_slow
OpenStruct.new(name: 'User', age: 21)
end
def ostruct_fast
OpenStruct.new(HASH)
end
def struct_slow
User.new('User', 21)
end
def struct_fast
User.new(USER, AGE)
end
Benchmark.ips do |x|
x.report('OpenStruct slow') { ostruct_slow }
x.report('OpenStruct fast') { ostruct_fast }
x.report('Struct slow') { struct_slow }
x.report('Struct fast') { struct_fast }
x.compare!
end
aus-mac-1033 @ ~/g/r/benchmarks 🐟  ruby -v benchmark-structs.rb 
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]
Calculating -------------------------------------
     OpenStruct slow     7.058k i/100ms
     OpenStruct fast     7.218k i/100ms
         Struct slow    72.156k i/100ms
         Struct fast    85.635k i/100ms
-------------------------------------------------
     OpenStruct slow     76.449k (± 6.7%) i/s -    381.132k
     OpenStruct fast     80.564k (± 6.5%) i/s -    404.208k
         Struct slow      2.393M (± 4.9%) i/s -     11.978M
         Struct fast      3.077M (± 6.0%) i/s -     15.329M

Comparison:
         Struct fast:  3076837.7 i/s
         Struct slow:  2393276.9 i/s - 1.29x slower
     OpenStruct fast:    80563.6 i/s - 38.19x slower
     OpenStruct slow:    76449.4 i/s - 40.25x slower
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment