diff options
| author | claudiob <claudiob@gmail.com> | 2014-10-17 11:38:00 -0700 |
|---|---|---|
| committer | Zachary Scott <e@zzak.io> | 2014-10-18 12:59:51 -0700 |
| commit | 0ab075e75f58bf403f7ebe20546c7005f35db1f6 (patch) | |
| tree | cf25b9db97e8a06eed8a4b32d451fae0704ee1bc /actionpack/lib/action_controller/metal | |
| parent | fd56b51f9bd9a472a464f7fb5ba40560156cd557 (diff) | |
| download | rails-0ab075e75f58bf403f7ebe20546c7005f35db1f6.tar.gz rails-0ab075e75f58bf403f7ebe20546c7005f35db1f6.tar.bz2 rails-0ab075e75f58bf403f7ebe20546c7005f35db1f6.zip | |
Replace (slower) block.call with (faster) yield
Performance optimization: `yield` with an implicit `block` is faster than `block.call`.
See http://youtu.be/fGFM_UrSp70?t=10m35s and the following benchmark:
```ruby
require 'benchmark/ips'
def fast
yield
end
def slow(&block)
block.call
end
Benchmark.ips do |x|
x.report('fast') { fast{} }
x.report('slow') { slow{} }
end
# => fast 154095 i/100ms
# => slow 71454 i/100ms
# =>
# => fast 7511067.8 (±5.0%) i/s - 37445085 in 4.999660s
# => slow 1227576.9 (±6.8%) i/s - 6145044 in 5.028356s
```
Diffstat (limited to 'actionpack/lib/action_controller/metal')
| -rw-r--r-- | actionpack/lib/action_controller/metal/mime_responds.rb | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/actionpack/lib/action_controller/metal/mime_responds.rb b/actionpack/lib/action_controller/metal/mime_responds.rb index dc572f13d2..591f881a53 100644 --- a/actionpack/lib/action_controller/metal/mime_responds.rb +++ b/actionpack/lib/action_controller/metal/mime_responds.rb @@ -216,11 +216,11 @@ module ActionController #:nodoc: # # Be sure to check the documentation of +respond_with+ and # <tt>ActionController::MimeResponds.respond_to</tt> for more examples. - def respond_to(*mimes, &block) + def respond_to(*mimes) raise ArgumentError, "respond_to takes either types or a block, never both" if mimes.any? && block_given? collector = Collector.new(mimes, request.variant) - block.call(collector) if block_given? + yield collector if block_given? if format = collector.negotiate_format(request) _process_format(format) |
