Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'benchmark/ips'
- class Foo
- def bar
- # "Foo#bar"
- end
- end
- module Bar
- def bar
- # "Bar#bar"
- end
- end
- class FooWrapper
- attr_reader :obj
- def initialize(obj)
- @obj = obj
- end
- def bar
- # "FooWrapper#bar"
- end
- def method_missing *args, &block
- obj.public_send *args, &block
- end
- end
- Benchmark.ips do |x|
- x.report "plain" do
- Foo.new.bar
- end
- x.report "extend" do
- Foo.new.extend(Bar).bar
- end
- x.report "proxy" do
- FooWrapper.new(Foo.new).bar
- end
- Foo.extend Bar
- x.report "Foo extended once" do
- Foo.new.bar
- end
- end
- # Calculating -------------------------------------
- # plain 135.946k i/100ms
- # extend 34.635k i/100ms
- # proxy 112.357k i/100ms
- # -------------------------------------------------
- # plain 4.939M (± 5.0%) i/s - 24.742M
- # extend 438.022k (± 4.1%) i/s - 2.217M
- # proxy 2.676M (± 4.1%) i/s - 13.370M
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement