Improve performance by avoiding method cache busts (#19957)
Switch to monkey-patching http.rb rather than a runtime extend of each response, so as to avoid busting the global method cache. A guard is included that will provide developer feedback in development and test environments should the monkey patch ever collide.pull/20091/head
parent
9f4930ec11
commit
833d9c2f1c
|
@ -62,8 +62,6 @@ class Request
|
|||
end
|
||||
|
||||
begin
|
||||
response = response.extend(ClientLimit)
|
||||
|
||||
# If we are using a persistent connection, we have to
|
||||
# read every response to be able to move forward at all.
|
||||
# However, simply calling #to_s or #flush may not be safe,
|
||||
|
@ -181,6 +179,14 @@ class Request
|
|||
end
|
||||
end
|
||||
|
||||
if ::HTTP::Response.methods.include?(:body_with_limit) && !Rails.env.production?
|
||||
abort 'HTTP::Response#body_with_limit is already defined, the monkey patch will not be applied'
|
||||
else
|
||||
class ::HTTP::Response
|
||||
include Request::ClientLimit
|
||||
end
|
||||
end
|
||||
|
||||
class Socket < TCPSocket
|
||||
class << self
|
||||
def open(host, *args)
|
||||
|
|
Loading…
Reference in New Issue