提交 8e489db9 编写于 作者: A Aaron Patterson

eagerly allocate the renderer object

this means the reader doesn't need to lock, but does have the added cost
of a new object created for every controller
上级 9808cdfa
......@@ -248,6 +248,7 @@ def self.without_modules(*modules)
MODULES.each do |mod|
include mod
end
setup_renderer!
# Define some internal variables that should not be propagated to the view.
PROTECTED_IVARS = AbstractController::Rendering::DEFAULT_PROTECTED_INSTANCE_VARIABLES + [
......
......@@ -11,20 +11,16 @@ module ClassMethods
# Documentation at ActionController::Renderer#render
delegate :render, to: :renderer
RENDERER_LOCK = Mutex.new
attr_writer :renderer
# Returns a renderer instance (inherited from ActionController::Renderer)
# for the controller.
def renderer
@renderer || RENDERER_LOCK.synchronize do
@renderer ||= Renderer.for(self)
end
attr_reader :renderer
def setup_renderer! # :nodoc:
@renderer = Renderer.for(self)
end
def inherited(klass)
klass.renderer = nil
klass.setup_renderer!
super
end
end
......
require 'abstract_unit'
class RendererTest < ActiveSupport::TestCase
test 'action controller base has a renderer' do
assert ActionController::Base.renderer
end
test 'creating with a controller' do
controller = CommentsController
renderer = ActionController::Renderer.for controller
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册