aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/CHANGELOG.md
diff options
context:
space:
mode:
authorSimon Coffey <simon@urbanautomaton.com>2018-03-30 22:45:57 +0100
committerSimon Coffey <simon@urbanautomaton.com>2018-04-02 20:50:33 +0100
commiteede8d8130558cb46aba8736bd63e8a28e37eac2 (patch)
tree2fd0d317f82cc3577d6f1d6b93e35432861ef648 /actionview/CHANGELOG.md
parent073168358740b33831f0963242ba1de1d0ddb0cc (diff)
downloadrails-eede8d8130558cb46aba8736bd63e8a28e37eac2.tar.gz
rails-eede8d8130558cb46aba8736bd63e8a28e37eac2.tar.bz2
rails-eede8d8130558cb46aba8736bd63e8a28e37eac2.zip
Add `action_view.finalize_compiled_template_methods` config option
ActionView::Template instances compile their source to methods on the ActionView::CompiledTemplates module. To prevent leaks in development mode, where templates can frequently change, a finalizer is added that undefines these methods[1] when the templates are garbage-collected. This is undesirable in the test environment, however, as templates don't change during the life of the test. Moreover, the cost of undefining a method is proportional to the number of descendants a class or module has, since the method cache must be cleared for all descendant classes. As ActionView::CompiledTemplates is mixed into every ActionView::TestCase (or in RSpec suites, every view spec example group), it can end up with a very large number of descendants, and undefining its methods can become very expensive. In large test suites, this results in a long delay at the end of the test suite as all template finalizers are run, only for the process to then exit. To avoid this unnecessary cost, this change adds a config option, `action_view.finalize_compiled_template_methods`, defaulting to true, and sets it to false in the test environment only. [1] https://github.com/rails/rails/blob/09b2348f7fc8d4e7191e70e06608c5909067e2aa/actionview/lib/action_view/template.rb#L118-L126
Diffstat (limited to 'actionview/CHANGELOG.md')
-rw-r--r--actionview/CHANGELOG.md9
1 files changed, 9 insertions, 0 deletions
diff --git a/actionview/CHANGELOG.md b/actionview/CHANGELOG.md
index 393de562a2..918ae48bed 100644
--- a/actionview/CHANGELOG.md
+++ b/actionview/CHANGELOG.md
@@ -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) {