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
Created
March 11, 2015 22:22
-
-
Save erran-r7/d3441d1e0d5050ebdcaf to your computer and use it in GitHub Desktop.
This file contains hidden or 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 '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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment