performance

  • method argument

def hello(foo: nil, bar: nil)
end
10_000.times { hello(foo: 1, bar: 2) }

# Runtime => 10.354 ms
def hello(options = {})
  foo, bar = options[:foo], options[:bar]
end
10_000.times { hello(foo: 1, bar: 2) }
# Runtime => 5.064 ms
  • obj.method VS obj attr_reader

    ```ruby class Foo def initialize(val) @val = val end

    def val @val end end

object = Foo.new("bar") 100_000.times { object.val }

Runtime => 9.284 ms

```ruby
class Foo
  def initialize(val)
    @val = val
  end

  attr_reader :val
end

object = Foo.new("bar")
100_000.times { object.val }
# Runtime => 6.966 ms
  • Array rand

(1..100_000).to_a.shuffle!
# Runtime => 6.968 ms
(1..100_000).to_a.sort_by { rand }
# Runtime => 94.396 ms
  • each VS while

100_000.times do |n|
  # Do something
end
# Runtime: 4.395 ms
n = 0

while n < 100_000
  # Do something
  n += 1
end
# Runtime: 1.878 ms
  • Block

def hello(&block)
  block.call
end

100_000.times do
  hello { "world" }
end
# Runtime: 72.739 ms
def hello
  yield
end

100_000.times do
  hello { "world" }
end
# Runtime: 18.987 ms

Last updated