Merge pull request #32418 from urbanautomaton/disable-template-finalizer-in-test

Disable ActionView::Template finalizers in test environment
This commit is contained in:
Rafael França 2018-04-02 16:27:21 -04:00 committed by GitHub
commit 9facd9a903
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 33 additions and 1 deletions

View File

@ -1,3 +1,12 @@
* Disable `ActionView::Template` finalizers in test environment
Template finalization can be expensive in large view test suites.
Add a configuration option,
`action_view.finalize_compiled_template_methods`, and turn it off in
the test environment.
*Simon Coffey*
* Extract the `confirm` call in its own, overridable method in `rails_ujs`.
Example :
Rails.confirm = function(message, element) {

View File

@ -10,6 +10,7 @@ module ActionView
config.action_view.embed_authenticity_token_in_remote_forms = nil
config.action_view.debug_missing_translation = true
config.action_view.default_enforce_utf8 = nil
config.action_view.finalize_compiled_template_methods = true
config.eager_load_namespaces << ActionView
@ -45,6 +46,13 @@ module ActionView
end
end
initializer "action_view.finalize_compiled_template_methods" do |app|
ActiveSupport.on_load(:action_view) do
ActionView::Template.finalize_compiled_template_methods =
app.config.action_view.delete(:finalize_compiled_template_methods)
end
end
initializer "action_view.logger" do
ActiveSupport.on_load(:action_view) { self.logger ||= Rails.logger }
end

View File

@ -9,6 +9,9 @@ module ActionView
class Template
extend ActiveSupport::Autoload
mattr_accessor :finalize_compiled_template_methods
self.finalize_compiled_template_methods = true
# === Encodings in ActionView::Template
#
# ActionView::Template is one of a few sources of potential
@ -307,7 +310,9 @@ module ActionView
end
mod.module_eval(source, identifier, 0)
ObjectSpace.define_finalizer(self, Finalizer[method_name, mod])
if finalize_compiled_template_methods
ObjectSpace.define_finalizer(self, Finalizer[method_name, mod])
end
end
def handle_render_error(view, e)

View File

@ -600,6 +600,13 @@ Defaults to `'signed cookie'`.
* `config.action_view.default_enforce_utf8` determines whether forms are generated with a hidden tag that forces older versions of Internet Explorer to submit forms encoded in UTF-8. This defaults to `false`.
* `config.action_view.finalize_compiled_template_methods` determines
whether the methods on `ActionView::CompiledTemplates` that templates
compile themselves to are removed when template instances are
destroyed by the garbage collector. This helps prevent memory leaks in
development mode, but for large test suites, disabling this option in
the test environment can improve performance. This defaults to `true`.
### Configuring Action Mailer
There are a number of settings available on `config.action_mailer`:

View File

@ -47,4 +47,7 @@ Rails.application.configure do
# Raises error for missing translations
# config.action_view.raise_on_missing_translations = true
# Prevent expensive template finalization at end of test suite runs.
config.action_view.finalize_compiled_template_methods = false
end