Add static caching for Twig_Environment::getTemplateClass()
authorScott Reeves <cottser@mailworks.org>
Mon, 29 Apr 2013 17:09:58 +0000 (13:09 -0400)
committerScott Reeves <cottser@mailworks.org>
Mon, 29 Apr 2013 17:09:58 +0000 (13:09 -0400)
lib/Twig/Environment.php

index 32b026a..89c5a67 100644 (file)
@@ -44,6 +44,7 @@ class Twig_Environment
     protected $functionCallbacks;
     protected $filterCallbacks;
     protected $staging;
+    protected $templateClasses;
 
     /**
      * Constructor.
@@ -107,6 +108,7 @@ class Twig_Environment
         $this->setCache($options['cache']);
         $this->functionCallbacks = array();
         $this->filterCallbacks = array();
+        $this->templateClasses = array();
 
         $this->addExtension(new Twig_Extension_Core());
         $this->addExtension(new Twig_Extension_Escaper($options['autoescape']));
@@ -262,7 +264,12 @@ class Twig_Environment
      */
     public function getTemplateClass($name, $index = null)
     {
-        return $this->templateClassPrefix.md5($this->getLoader()->getCacheKey($name)).(null === $index ? '' : '_'.$index);
+        $suffix = null === $index ? '' : '_'.$index;
+        $cls = $name.$suffix;
+        if (!isset($this->templateClasses[$cls])) {
+            $this->templateClasses[$cls] = $this->templateClassPrefix.md5($this->getLoader()->getCacheKey($name)).$suffix;
+        }
+        return $this->templateClasses[$cls];
     }
 
     /**