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

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

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

Post 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;
}
Вопрос: это бага или фича???
Last edited by von-hamster on Tue Nov 11, 2008 2:12 pm, edited 1 time in total.
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

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

Post by ZYV »

Я помню что как-то всё велись разговоры на тему что смарти надо обновлять, потом обновили и увидели, что с кешем она рбаотает сильно медленнее, чем без. Кеш отключили. Вот с тех пор видимо об этом забыли и к этому вопросу никто не возвращался. Ты можешь в топике про бету написать? Я сейчас ваш патч в mainline пытаюсь по поводу SEO пропихнуть. Сделаем хорошее дело?
unsigned double ZYV;
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

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

Post by von-hamster »

Мой разговорный английский - не очень, скорее даже совсем никак... Я попытаюсь, конечно, может - поймут... :-)
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

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

Post by von-hamster »

Запостил... Вроде поняли :)
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

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

Post by ZYV »

Ссылку :)?
unsigned double ZYV;
Post Reply

Return to “Russian - русский”