From 9b189a31696b6572ffb8164f1f3041d57e8eeebe Mon Sep 17 00:00:00 2001
From: schneems <richard.schneeman@gmail.com>
Date: Sat, 25 Jul 2015 00:08:47 -0500
Subject: Cut string ActionView template allocations

The instrument method creates new strings, the most common action to instrument is "!render_template` so we can detect when that action is occurring and use a frozen string instead.

This change buys us 113,714 bytes of memory and 1,790 fewer objects per request.
---
 actionview/lib/action_view/template.rb | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

(limited to 'actionview')

diff --git a/actionview/lib/action_view/template.rb b/actionview/lib/action_view/template.rb
index 1ce9f94b13..e232808dcb 100644
--- a/actionview/lib/action_view/template.rb
+++ b/actionview/lib/action_view/template.rb
@@ -154,7 +154,7 @@ module ActionView
     # we use a bang in this instrumentation because you don't want to
     # consume this in production. This is only slow if it's being listened to.
     def render(view, locals, buffer=nil, &block)
-      instrument("!render_template") do
+      instrument("!render_template".freeze) do
         compile!(view)
         view.send(method_name, locals, buffer, &block)
       end
@@ -348,7 +348,12 @@ module ActionView
 
       def instrument(action, &block)
         payload = { virtual_path: @virtual_path, identifier: @identifier }
-        ActiveSupport::Notifications.instrument("#{action}.action_view", payload, &block)
+        case action
+        when "!render_template".freeze
+          ActiveSupport::Notifications.instrument("!render_template.action_view".freeze, payload, &block)
+        else
+          ActiveSupport::Notifications.instrument("#{action}.action_view".freeze, payload, &block)
+        end
       end
 
       EXPLICIT_COLLECTION = /# Template Collection: (?<resource_name>\w+)/
-- 
cgit v1.2.3