- add caching for config files in Smarty_Resource

(not really sure why this wasn't implemented yet?!) If we removed this (for some reason) we should've made a note of it in the code...
This commit is contained in:
rodneyrehm
2011-10-13 09:50:55 +00:00
parent 0fabe627ad
commit 3b006ae5a1
3 changed files with 43 additions and 12 deletions

View File

@@ -1,4 +1,7 @@
===== trunk ===== ===== trunk =====
13.10.2011
- add caching for config files in Smarty_Resource
11.10.2011 11.10.2011
- add runtime checks for not matching {capture}/{/capture} calls (Forum Topic 20120) - add runtime checks for not matching {capture}/{/capture} calls (Forum Topic 20120)

View File

@@ -197,6 +197,11 @@ class Smarty extends Smarty_Internal_TemplateBase {
*/ */
public $joined_template_dir = null; public $joined_template_dir = null;
/** /**
* joined config directory string used in cache keys
* @var string
*/
public $joined_config_dir = null;
/**
* default template handler * default template handler
* @var callable * @var callable
*/ */
@@ -841,7 +846,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
foreach ((array) $config_dir as $k => $v) { foreach ((array) $config_dir as $k => $v) {
$this->config_dir[$k] = rtrim($v, '/\\') . DS; $this->config_dir[$k] = rtrim($v, '/\\') . DS;
} }
$this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
return $this; return $this;
} }
@@ -874,7 +880,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
// append new directory // append new directory
$this->config_dir[] = rtrim($config_dir, '/\\') . DS; $this->config_dir[] = rtrim($config_dir, '/\\') . DS;
} }
$this->joined_config_dir = join(DIRECTORY_SEPARATOR, $this->config_dir);
return $this; return $this;
} }

View File

@@ -398,16 +398,6 @@ abstract class Smarty_Resource {
$template_resource = $_template->template_resource; $template_resource = $_template->template_resource;
} }
// check runtime cache
$_cache_key_dir = $smarty->joined_template_dir;
$_cache_key = 'template|' . $template_resource;
if (!isset(self::$sources[$_cache_key_dir])) {
self::$sources[$_cache_key_dir] = array();
}
if (isset(self::$sources[$_cache_key_dir][$_cache_key])) {
return self::$sources[$_cache_key_dir][$_cache_key];
}
if (($pos = strpos($template_resource, ':')) === false) { if (($pos = strpos($template_resource, ':')) === false) {
// no resource given, use default // no resource given, use default
$resource_type = $smarty->default_resource_type; $resource_type = $smarty->default_resource_type;
@@ -424,6 +414,20 @@ abstract class Smarty_Resource {
} }
$resource = Smarty_Resource::load($smarty, $resource_type); $resource = Smarty_Resource::load($smarty, $resource_type);
// TODO: modify $template_resource here
// check runtime cache
$_cache_key_dir = $smarty->joined_template_dir;
$_cache_key = 'template|' . $template_resource;
if (!isset(self::$sources[$_cache_key_dir])) {
self::$sources[$_cache_key_dir] = array();
}
if (isset(self::$sources[$_cache_key_dir][$_cache_key])) {
return self::$sources[$_cache_key_dir][$_cache_key];
}
// create source
$source = new Smarty_Template_Source($resource, $smarty, $template_resource, $resource_type, $resource_name); $source = new Smarty_Template_Source($resource, $smarty, $template_resource, $resource_type, $resource_name);
$resource->populate($source, $_template); $resource->populate($source, $_template);
@@ -464,8 +468,25 @@ abstract class Smarty_Resource {
} }
$resource = Smarty_Resource::load($smarty, $resource_type); $resource = Smarty_Resource::load($smarty, $resource_type);
// TODO: modify $config_resource here
// check runtime cache
$_cache_key_dir = $smarty->joined_config_dir;
$_cache_key = 'config|' . $config_resource;
if (!isset(self::$sources[$_cache_key_dir])) {
self::$sources[$_cache_key_dir] = array();
}
if (isset(self::$sources[$_cache_key_dir][$_cache_key])) {
return self::$sources[$_cache_key_dir][$_cache_key];
}
// create source
$source = new Smarty_Config_Source($resource, $smarty, $config_resource, $resource_type, $resource_name); $source = new Smarty_Config_Source($resource, $smarty, $config_resource, $resource_type, $resource_name);
$resource->populate($source, null); $resource->populate($source, null);
// runtime cache
self::$sources[$_cache_key_dir][$_cache_key] = $source;
return $source; return $source;
} }