From 633eb5ad9b4faefd500624b6fa65a0372be82948 Mon Sep 17 00:00:00 2001
From: Shane Tomlinson <stomlinson@mozilla.com>
Date: Fri, 13 Jan 2012 12:21:03 +0000
Subject: [PATCH] Cache off the templates once they are created.

close #899
---
 resources/static/shared/renderer.js | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/resources/static/shared/renderer.js b/resources/static/shared/renderer.js
index 4b66dafa0..041974640 100644
--- a/resources/static/shared/renderer.js
+++ b/resources/static/shared/renderer.js
@@ -7,11 +7,12 @@ BrowserID.Renderer = (function() {
   "use strict";
 
   var bid = BrowserID,
-      dom = bid.DOM;
+      dom = bid.DOM,
+      templateCache = {};
 
-  function getTemplateHTML(body, vars) {
+  function getTemplateHTML(templateName, vars) {
     var config,
-        templateText = bid.Templates[body];
+        templateText = bid.Templates[templateName];
 
     if(templateText) {
       config = {
@@ -21,21 +22,27 @@ BrowserID.Renderer = (function() {
     else {
       // TODO - be able to set the directory
       config = {
-        url: "/dialog/views/" + body + ".ejs"
+        url: "/dialog/views/" + templateName + ".ejs"
       };
     }
 
-    var html = new EJS(config).render(vars);
+    var template = templateCache[templateName];
+    if(!template) {
+      template = new EJS(config);
+      templateCache[templateName] = template;
+    }
+
+    var html = template.render(vars);
     return html;
   }
 
-  function render(target, body, vars) {
-    var html = getTemplateHTML(body, vars);
+  function render(target, templateName, vars) {
+    var html = getTemplateHTML(templateName, vars);
     return dom.setInner(target, html);
   }
 
-  function append(target, body, vars) {
-    var html = getTemplateHTML(body, vars);
+  function append(target, templateName, vars) {
+    var html = getTemplateHTML(templateName, vars);
     return dom.appendTo(html, target);
   }
 
-- 
GitLab