Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.98 KB | None | 0 0
  1. require 'benchmark/ips'
  2.  
  3. class Foo
  4. def bar
  5. # "Foo#bar"
  6. end
  7. end
  8.  
  9. module Bar
  10. def bar
  11. # "Bar#bar"
  12. end
  13. end
  14.  
  15. class FooWrapper
  16. attr_reader :obj
  17. def initialize(obj)
  18. @obj = obj
  19. end
  20.  
  21. def bar
  22. # "FooWrapper#bar"
  23. end
  24.  
  25. def method_missing *args, &block
  26. obj.public_send *args, &block
  27. end
  28. end
  29.  
  30. Benchmark.ips do |x|
  31. x.report "plain" do
  32. Foo.new.bar
  33. end
  34.  
  35. x.report "extend" do
  36. Foo.new.extend(Bar).bar
  37. end
  38.  
  39. x.report "proxy" do
  40. FooWrapper.new(Foo.new).bar
  41. end
  42.  
  43. Foo.extend Bar
  44. x.report "Foo extended once" do
  45. Foo.new.bar
  46. end
  47. end
  48.  
  49. # Calculating -------------------------------------
  50. # plain 135.946k i/100ms
  51. # extend 34.635k i/100ms
  52. # proxy 112.357k i/100ms
  53. # -------------------------------------------------
  54. # plain 4.939M (± 5.0%) i/s - 24.742M
  55. # extend 438.022k (± 4.1%) i/s - 2.217M
  56. # proxy 2.676M (± 4.1%) i/s - 13.370M
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement