Page 1 of 1

Ошибки кэширования

Posted: Tue Nov 11, 2008 2:10 pm
by von-hamster
Хотел прокэшировать результаты выполнения модуля. Посмотрел код, сделал следующим образом:

Code: Select all

if (!$this->IsFileTemplateCached($template, '', '', $name)) {
       // здесь выполняем подготовительный код
}
echo $this->ProcessTemplate($template, '', true, $name);
Поидее должен был прокэшироваться результат... Но ничего не произошло... Начал смотреть в код и обнаружил там следующее:

1. /lib/classes/class.module.inc.php

Code: Select all

	function ProcessTemplate($tpl_name, $designation = '', $cache = false, $cacheid = '')
	{
		$this->LoadTemplateMethods();
// здесь принудительно отключается кэширование: $cache = false
		return cms_module_ProcessTemplate($this, $tpl_name, $designation, $cache = false, $cacheid);
	}
2. /lib/classes/module_support/modtemplates.inc.php

Code: Select all

function cms_module_IsFileTemplateCached(&$modinstance, $tpl_name, $designation = '', $timestamp = '', $cacheid = '')
{
	$ok = (strpos($tpl_name, '..') === false);
	if (!$ok) return;

	global $gCms;
	$smarty = &$gCms->GetSmarty();
	$oldcache = $smarty->caching;

// Здесь принудительно отключается кэширование в любом случае
	$smarty->caching = false;

// А дальше проверяется наличие кэша - непонятно зачем... Мне кажется, что имелось ввиду $smarty->caching = true;
	$result = $smarty->is_cached('module_file_tpl:'.$modinstance->GetName().';'.$tpl_name, $cacheid, ($designation != ''?$designation:$modinstance->GetName()));

	if ($result == true && $timestamp != '' && intval($smarty->_cache_info['timestamp']) < intval($timestamp))
	{
		$smarty->clear_cache('module_file_tpl:'.$modinstance->GetName().';'.$tpl_name, $cacheid, ($designation != ''?$designation:$modinstance->GetName()));
		$result = false;
	}

	$smarty->caching = $oldcache;
	return $result;
}

function cms_module_ProcessTemplate(&$modinstance, $tpl_name, $designation = '', $cache = false, $cacheid = '')
{
	$ok = (strpos($tpl_name, '..') === false);
	if (!$ok) return;

	global $gCms;
	$smarty = &$gCms->GetSmarty();

	$oldcache = $smarty->caching;

// Здесь тоже самое, по моему должно быть: $smarty->caching = $cache;
	$smarty->caching = false;

	$result = $smarty->fetch('module_file_tpl:'.$modinstance->GetName().';'.$tpl_name, $cacheid, ($designation != ''?$designation:$modinstance->GetName()));
	$smarty->caching = $oldcache;

	return $result;
}
Вопрос: это бага или фича???

Re: Ошибки кэширования

Posted: Tue Nov 11, 2008 2:20 pm
by ZYV
Я помню что как-то всё велись разговоры на тему что смарти надо обновлять, потом обновили и увидели, что с кешем она рбаотает сильно медленнее, чем без. Кеш отключили. Вот с тех пор видимо об этом забыли и к этому вопросу никто не возвращался. Ты можешь в топике про бету написать? Я сейчас ваш патч в mainline пытаюсь по поводу SEO пропихнуть. Сделаем хорошее дело?

Re: Ошибки кэширования

Posted: Tue Nov 11, 2008 2:30 pm
by von-hamster
Мой разговорный английский - не очень, скорее даже совсем никак... Я попытаюсь, конечно, может - поймут... :-)

Re: Ошибки кэширования

Posted: Wed Nov 12, 2008 2:24 pm
by von-hamster
Запостил... Вроде поняли :)

Re: Ошибки кэширования

Posted: Wed Nov 12, 2008 2:38 pm
by ZYV
Ссылку :)?

Re: Ошибки кэширования

Posted: Thu Nov 13, 2008 6:04 am
by von-hamster