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.
This commit is contained in:
		
							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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user