[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