Sha256: 4ec0545704eb1321f7e89a1be04d003a2660f8092d52d00b684c7db910e96396
Contents?: true
Size: 1.2 KB
Versions: 7
Compression:
Stored size: 1.2 KB
Contents
$:.unshift "../lib" require 'benchmark' require 'needle' ITERATIONS = 100_000 class TrivialInterceptor def initialize( point, parms ) end def process( chain, ctx ) chain.process_next( ctx ) end end registry = Needle::Registry.new registry.register( :interceptor ) { TrivialInterceptor } registry.register( :direct ) { Struct.new( :value ).new } registry.register( :intercepted_doing ) { Struct.new( :value ).new } registry.register( :intercepted_with ) { Struct.new( :value ).new } registry.intercept( :intercepted_doing ).doing { |chain,ctx| chain.process_next(ctx) } registry.intercept( :intercepted_with ).with { registry.interceptor } direct = registry.direct intercepted_doing = registry.intercepted_doing intercepted_with = registry.intercepted_with puts puts "--------------------------------------------------------------------" puts "Direct method dispatch vs. intercepted method dispatch (trivial)" puts "#{ITERATIONS} iterations" puts Benchmark.bm(20) do |x| x.report( "direct:" ) { ITERATIONS.times { direct.value } } x.report( "intercepted (doing):" ) { ITERATIONS.times { intercepted_doing.value } } x.report( "intercepted (with):" ) { ITERATIONS.times { intercepted_with.value } } end puts
Version data entries
7 entries across 7 versions & 1 rubygems