[limb-svn] r6355 - in 3.x/trunk/limb/macro: src tests tests/bench tests/bench/tpl tests/cases/tags

svn at limb-project.com svn at limb-project.com
Mon Oct 1 23:51:53 MSD 2007


Author: pachanga
Date: 2007-10-01 23:51:53 +0400 (Mon, 01 Oct 2007)
New Revision: 6355
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6355

Added:
   3.x/trunk/limb/macro/tests/bench/
   3.x/trunk/limb/macro/tests/bench/forcecompile.php
   3.x/trunk/limb/macro/tests/bench/native.php
   3.x/trunk/limb/macro/tests/bench/nocompile.php
   3.x/trunk/limb/macro/tests/bench/tpl/
   3.x/trunk/limb/macro/tests/bench/tpl/native.phtml
   3.x/trunk/limb/macro/tests/bench/tpl/simple.phtml
Modified:
   3.x/trunk/limb/macro/src/lmbMacroCodeWriter.class.php
   3.x/trunk/limb/macro/src/lmbMacroConfig.class.php
   3.x/trunk/limb/macro/src/lmbMacroTemplate.class.php
   3.x/trunk/limb/macro/tests/cases/tags/lmbMacroIncludeTagTest.class.php
Log:
-- MACRO compiled templates caching added & some other optimizations

Modified: 3.x/trunk/limb/macro/src/lmbMacroCodeWriter.class.php
===================================================================
--- 3.x/trunk/limb/macro/src/lmbMacroCodeWriter.class.php	2007-10-01 18:05:31 UTC (rev 6354)
+++ 3.x/trunk/limb/macro/src/lmbMacroCodeWriter.class.php	2007-10-01 19:51:53 UTC (rev 6355)
@@ -119,8 +119,11 @@
 
     return "<?php\n" .
            $this->_renderIncludeList() . 
+           //protection from self inclusion
+           "if(!class_exists('{$this->class}', false)){\n" .
            "class {$this->class} " . ($this->parent ? "extends {$this->parent} " : '') . "{\n" .
            $this->_renderMethods() . 
+           "\n}" . 
            "\n}";
   }
 

Modified: 3.x/trunk/limb/macro/src/lmbMacroConfig.class.php
===================================================================
--- 3.x/trunk/limb/macro/src/lmbMacroConfig.class.php	2007-10-01 18:05:31 UTC (rev 6354)
+++ 3.x/trunk/limb/macro/src/lmbMacroConfig.class.php	2007-10-01 19:51:53 UTC (rev 6355)
@@ -22,13 +22,13 @@
   protected $tpl_scan_dirs = array();
 
   function __construct($cache_dir = null, $is_force_compile = true, $is_force_scan = true, 
-                      $tags_scan_dirs = null, $tpl_scan_dirs = null)
+                       $tpl_scan_dirs = null, $tags_scan_dirs = null)
   {
     $this->cache_dir = $cache_dir ? $cache_dir : LIMB_VAR_DIR . '/compiled';
     $this->is_force_compile = $is_force_compile;
     $this->is_force_scan = $is_force_scan;
+    $this->tpl_scan_dirs = $tpl_scan_dirs ? $tpl_scan_dirs : array();
     $this->tags_scan_dirs = $tags_scan_dirs ? $tags_scan_dirs : array('limb/macro/src/tags');
-    $this->tpl_scan_dirs = $tpl_scan_dirs ? $tpl_scan_dirs : array();
   }
 
   function getCacheDir()

Modified: 3.x/trunk/limb/macro/src/lmbMacroTemplate.class.php
===================================================================
--- 3.x/trunk/limb/macro/src/lmbMacroTemplate.class.php	2007-10-01 18:05:31 UTC (rev 6354)
+++ 3.x/trunk/limb/macro/src/lmbMacroTemplate.class.php	2007-10-01 19:51:53 UTC (rev 6355)
@@ -29,7 +29,6 @@
     $this->file = $file;
     $this->config = $config ? $config : new lmbMacroConfig();
     $this->locator = new lmbMacroTemplateLocator($this->config);
-    $this->tag_dictionary = lmbMacroTagDictionary :: load($this->config);
   }
 
   static function locateTemplateByAlias($alias, lmbMacroConfig $config = null)
@@ -56,18 +55,24 @@
 
   function render($vars = array())
   {
-    if(!$source_file = $this->locator->locateSourceTemplate($this->file))    
-      throw new lmbMacroException('Template source file not found', array('file_name' => $this->file));
-
     $compiled_file = $this->locator->locateCompiledTemplate($this->file);
 
-    $class = 'MacroTemplateExecutor' . uniqid();//think about evaling this instance
+    if($this->config->isForceCompile() || !file_exists($compiled_file))
+    {
+      if(!$source_file = $this->locator->locateSourceTemplate($this->file))    
+        throw new lmbMacroException('Template source file not found', array('file_name' => $this->file));
 
-    $compiler = $this->_createCompiler();
-    $compiler->compile($source_file, $compiled_file, $class, 'render');
+      $macro_executor_class = 'MacroTemplateExecutor' . uniqid();//think about evaling this instance
 
+      $compiler = $this->_createCompiler();
+      $compiler->compile($source_file, $compiled_file, $macro_executor_class, 'render');
+      //appending macro executor class
+      file_put_contents($compiled_file, file_get_contents($compiled_file) . 
+                                        "\n\$macro_executor_class='$macro_executor_class';");
+    }
+
     include($compiled_file);
-    $executor = new $class($this->config, $this->vars);
+    $executor = new $macro_executor_class($this->config, $this->vars);
 
     //in case of dynamic wrapping we need to ask parent for all unknown variables
     if($this->child_executor)
@@ -82,7 +87,8 @@
 
   protected function _createCompiler()
   {
-    return new lmbMacroCompiler($this->tag_dictionary, $this->locator);
+    $tag_dictionary = lmbMacroTagDictionary :: load($this->config);
+    return new lmbMacroCompiler($tag_dictionary, $this->locator);
   }
 }
 

Added: 3.x/trunk/limb/macro/tests/bench/forcecompile.php
===================================================================
--- 3.x/trunk/limb/macro/tests/bench/forcecompile.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/tests/bench/forcecompile.php	2007-10-01 19:51:53 UTC (rev 6355)
@@ -0,0 +1,24 @@
+<?php
+
+set_include_path(dirname(__FILE__) . '/../../../../');
+require_once('limb/core/common.inc.php');
+require_once('limb/macro/src/lmbMacroTemplate.class.php');
+
+$config = new lmbMacroConfig('/tmp/macro', true, true, array(dirname(__FILE__) . '/tpl'));
+
+for($i=0;$i<100;$i++)
+{
+  $tpl = new lmbMacroTemplate('simple.phtml', $config);
+  $tpl->set('name', 'Bob');
+  $tpl->render();
+}
+
+$classes = array();
+foreach(get_declared_classes() as $class)
+{
+    $refl = new ReflectionClass($class);
+      if(strpos($refl->getFileName(), 'src/') !== false)
+            $classes[] = $class;
+}
+sort($classes);
+var_dump($classes);

Added: 3.x/trunk/limb/macro/tests/bench/native.php
===================================================================
--- 3.x/trunk/limb/macro/tests/bench/native.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/tests/bench/native.php	2007-10-01 19:51:53 UTC (rev 6355)
@@ -0,0 +1,23 @@
+<?php
+
+set_include_path(dirname(__FILE__) . '/../../../../');
+require_once('limb/core/common.inc.php');
+
+for($i=0;$i<100;$i++)
+{
+  $name = 'Bob';
+  ob_start();
+  include(dirname(__FILE__) . '/tpl/native.phtml');
+  $content = ob_get_contents();
+  ob_end_clean();
+}
+
+$classes = array();
+foreach(get_declared_classes() as $class)
+{
+    $refl = new ReflectionClass($class);
+      if(strpos($refl->getFileName(), 'src/') !== false)
+            $classes[] = $class;
+}
+sort($classes);
+var_dump($classes);

Added: 3.x/trunk/limb/macro/tests/bench/nocompile.php
===================================================================
--- 3.x/trunk/limb/macro/tests/bench/nocompile.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/tests/bench/nocompile.php	2007-10-01 19:51:53 UTC (rev 6355)
@@ -0,0 +1,24 @@
+<?php
+
+set_include_path(dirname(__FILE__) . '/../../../../');
+require_once('limb/core/common.inc.php');
+require_once('limb/macro/src/lmbMacroTemplate.class.php');
+
+$config = new lmbMacroConfig('/tmp/macro', false, false, array(dirname(__FILE__) . '/tpl'));
+
+for($i=0;$i<100;$i++)
+{
+  $tpl = new lmbMacroTemplate('simple.phtml', $config);
+  $tpl->set('name', 'Bob');
+  $tpl->render();
+}
+
+$classes = array();
+foreach(get_declared_classes() as $class)
+{
+    $refl = new ReflectionClass($class);
+      if(strpos($refl->getFileName(), 'src/') !== false)
+            $classes[] = $class;
+}
+sort($classes);
+var_dump($classes);

Added: 3.x/trunk/limb/macro/tests/bench/tpl/native.phtml
===================================================================
--- 3.x/trunk/limb/macro/tests/bench/tpl/native.phtml	                        (rev 0)
+++ 3.x/trunk/limb/macro/tests/bench/tpl/native.phtml	2007-10-01 19:51:53 UTC (rev 6355)
@@ -0,0 +1 @@
+Hello, <?php echo $name?>!

Added: 3.x/trunk/limb/macro/tests/bench/tpl/simple.phtml
===================================================================
--- 3.x/trunk/limb/macro/tests/bench/tpl/simple.phtml	                        (rev 0)
+++ 3.x/trunk/limb/macro/tests/bench/tpl/simple.phtml	2007-10-01 19:51:53 UTC (rev 6355)
@@ -0,0 +1 @@
+Hello, {{$#name}}!

Modified: 3.x/trunk/limb/macro/tests/cases/tags/lmbMacroIncludeTagTest.class.php
===================================================================
--- 3.x/trunk/limb/macro/tests/cases/tags/lmbMacroIncludeTagTest.class.php	2007-10-01 18:05:31 UTC (rev 6354)
+++ 3.x/trunk/limb/macro/tests/cases/tags/lmbMacroIncludeTagTest.class.php	2007-10-01 19:51:53 UTC (rev 6355)
@@ -128,7 +128,7 @@
   {
     $base_dir = LIMB_VAR_DIR . '/tpl';
     $cache_dir = LIMB_VAR_DIR . '/tpl/compiled';
-    $macro = new lmbMacroTemplate($file, new lmbMacroConfig($cache_dir, true, true, null, array($base_dir)));
+    $macro = new lmbMacroTemplate($file, new lmbMacroConfig($cache_dir, true, true, array($base_dir)));
     return $macro;
   }
 



More information about the limb-svn mailing list