Skip to content

defined? poor performance #3808

@etehtsea

Description

@etehtsea

Started in newrelic/newrelic-ruby-agent#222

require 'benchmark/ips'
# Uncomment for the second bench
# require 'active_support/dependencies'

Benchmark.ips do |x|
  x.config(warmup: 30, time: 20)
  x.report("const_defined?") do
    Object.const_defined?(:ActionDispatch) &&
      ::ActionDispatch.const_defined?(:Http) &&
      ::ActionDispatch::Http.const_defined?(:ParameterFilter)
  end
  x.report("defined?") { defined?(ActionDispatch::Http::ParameterFilter) }
  x.compare!
end

JRuby 9.0.5.0

/tmp  ⚡ jruby -S check.rb      
Warming up --------------------------------------
      const_defined?   171.651k i/100ms
            defined?     1.043k i/100ms
Calculating -------------------------------------
      const_defined?      6.944M (± 8.1%) i/s -    137.836M in  19.993781s
            defined?     10.139k (± 6.9%) i/s -    202.342k in  20.054383s

Comparison:
      const_defined?:  6943907.0 i/s
            defined?:    10139.3 i/s - 684.85x slower

JRuby 1.7.23

/tmp  ⚡ jruby -S check.rb
Warming up --------------------------------------
      const_defined?   155.373k i/100ms
            defined?     1.073k i/100ms
Calculating -------------------------------------
      const_defined?      3.535M (± 5.9%) i/s -     70.539M
            defined?     11.502k (± 6.1%) i/s -    229.622k

Comparison:
      const_defined?:  3535262.7 i/s
            defined?:    11501.9 i/s - 307.36x slower

MRI 2.3.0

Warming up --------------------------------------
      const_defined?   237.564k i/100ms
            defined?   241.210k i/100ms
Calculating -------------------------------------
      const_defined?      6.708M (± 5.3%) i/s -    133.986M in  20.029896s
            defined?      7.355M (± 5.8%) i/s -    146.656M in  20.006529s

Comparison:
            defined?:  7355217.2 i/s
      const_defined?:  6707708.2 i/s - same-ish: difference falls within error

With ActiveSupport::Dependencies required:

JRuby 9.0.5.0

Warming up --------------------------------------
      const_defined?   156.141k i/100ms
            defined?   347.000  i/100ms
Calculating -------------------------------------
      const_defined?      5.216M (± 6.8%) i/s -    103.834M in  20.003748s
            defined?      3.484k (± 7.5%) i/s -     69.400k in  20.041216s

Comparison:
      const_defined?:  5216398.2 i/s
            defined?:     3483.7 i/s - 1497.36x slower

JRuby 1.7.23

/tmp  ⚡ jruby -S check.rb
Warming up --------------------------------------
      const_defined?   174.217k i/100ms
            defined?   416.000  i/100ms
Calculating -------------------------------------
      const_defined?      4.043M (± 4.8%) i/s -     80.662M
            defined?      4.224k (± 5.1%) i/s -     84.448k

Comparison:
      const_defined?:  4042664.2 i/s
            defined?:     4224.1 i/s - 957.05x slower

MRI 2.3.0

/tmp  ⚡ ruby check.rb 
Warming up --------------------------------------
      const_defined?   223.693k i/100ms
            defined?   231.453k i/100ms
Calculating -------------------------------------
      const_defined?      6.140M (± 5.9%) i/s -    122.360M in  19.998885s
            defined?      6.191M (± 7.9%) i/s -    123.133M in  20.026093s

Comparison:
            defined?:  6190901.7 i/s
      const_defined?:  6140088.9 i/s - same-ish: difference falls within error

P.S.

  • jruby-9.0.5.0 (2.2.3) 2016-01-26 7bee00d Java HotSpot(TM) 64-Bit Server VM 25.77-b03 on 1.8.0_77-b03 +jit [darwin-x86_64]
  • jruby 1.7.23 (1.9.3p551) 2015-11-24 f496dd5 on Java HotSpot(TM) 64-Bit Server VM 1.8.0_77-b03 +jit [darwin-x86_64]
  • ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]

UPD:

/tmp  ⚡ jruby --version                
jruby 9.1.0.0-SNAPSHOT (2.3.0) 2016-04-19 2d27311 Java HotSpot(TM) 64-Bit Server VM 25.77-b03 on 1.8.0_77-b03 +jit [darwin-x86_64]

/tmp  ⚡ jruby -S check.rb          
Warming up --------------------------------------
      const_defined?   154.530k i/100ms
            defined?   923.000  i/100ms
Calculating -------------------------------------
      const_defined?      7.035M (± 7.0%) i/s -    139.850M in  19.979653s
            defined?      9.367k (± 5.2%) i/s -    187.369k in  20.055586s

Comparison:
      const_defined?:  7034829.3 i/s
            defined?:     9366.8 i/s - 751.04x slower

/tmp  ⚡ jruby -S check.rb                                         
Warming up --------------------------------------
      const_defined?   197.363k i/100ms
            defined?   360.000  i/100ms
Calculating -------------------------------------
      const_defined?      7.055M (± 5.9%) i/s -    140.522M in  19.991747s
            defined?      3.671k (± 3.9%) i/s -     73.440k in  20.034533s

Comparison:
      const_defined?:  7054891.5 i/s
            defined?:     3671.3 i/s - 1921.66x slower

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions