Использование кэша в расширениях Joomla

  • Пятница, 28 июля 2006

Предыдущая статья была посвящена общему принципу работы механизма кэширования в Joomla и выбору оптимального времени жизни кэша. В этой статье, предназначенной для разработчиков, я хочу рассказать о том, как использовать встроенный механизм кэширования Joomla в своих расширениях.

Общие сведения

Для реализации механизма кэширования, разработчики Joomla используют бесплатную библиотеку Cache_Lite. В качестве менеджера кэша выступает класс JCache_Lite_Function. Данный класс содержит метод call, позволяющий вызвать произвольную функцию по имени и передать ей на вход указанные параметры. При вызове этого метода, в качестве первого параметра указывается имя функции, а далее — произвольное количество переменных, являющихся параметрами этой функции.

При вызове метода call, происходит поиск файла кэша для этой функции и заданного набора параметров. Если такой файл найден, и время жизни этого закэшированного объекта не истекло, то вместо реального вызова функции, происходит возврат данных из файла. Если файл не найден, то это означает, что данная функция с такими параметрами еще не вызывалась. В этом случае происходит вызов функции, с передачей ей на вход указанных параметров, а результат работы функции помещает в кэш.

Использование класса mosCache

Доступ к объекту менеджера кэша JCache_Lite_Function осуществляется через класс mosCache, который содержит всего 2 метода:

  • getCache($group='')

    Фабричный статический метод, возвращающий ссылку на объект менеджера кэша для заданной группы. В качестве имени группы может выступать любой текстовый идентификатор. Обычно, в качестве имени группы, используют имя компонента (например com_content).

  • cleanCache($group=false)

    Данный метод позволяет очистить кэш всех объектов для выбранной группы. Метод может использоваться для глобальной очистки кэша объектов вашего расширения.

Рассмотрим пример работы с классом mosCache:

// функция, результат работы которой необходимо закэшировать
function myfunction($arg1, $arg2, $arg3) {
	return $arg1 . $arg2 . $arg3;
}

// получаем экземпляр JCache_Lite_Function для нашего расширения
$cache =& mosCache::getCache( 'com_mycomponent' );

// вызываем функцию посредством менеджера кэша JCache_Lite_Function
echo $cache->call('myfunction', $arg1, $arg2, $arg3 );

Теперь, давайте рассмотрим как это будет работает. При вызове метода call менеджер кэша, проверит наличие функции myfunction, затем, попробует найти закэшированные данные для данной функции с указанными значениями параметров. Если найдет, то вернет данные из кэша, в противном случае — он вызовет данную функцию и передаст ей параметры $arg1, $arg2 и $arg3. А результат работы функции поместит в кэш, чтобы при следующем обращении не вызывать функцию.

ПРИМЕЧАНИЕ: класс использует параметры глобальной конфигурации Joomla для управления менеджером кэша JCache_Lite_Function. Т.е. если в глобальных настройках выключить кэш, то менеджер кэша в функции call будет всегда производить явный вызов указанной функции, не пытаясь найти закэшированные объекты. Поэтому, если вы хотите управлять кэшированием данных, вне зависимости от параметров глобальной конфигурации Joomla, необходимо использовать JCache_Lite_Function напрямую.

Использование класса JCache_Lite_Function

Рассмотрим пример работы с классом JCache_Lite_Function:

// функция, результат работы которой необходимо закэшировать
function myfunction($arg1, $arg2, $arg3) {
	return $arg1 . $arg2 . $arg3;
}

// параметры конфигурации Joomla
global $mosConfig_absolute_path, $mosConfig_cachepath;

// подключаем файл с определением класса JCache_Lite_Function
require_once( $mosConfig_absolute_path . '/includes/joomla.cache.php' );

// формируем массив параметров
	$options = array(
		// директория для хранения файлов кэша
		'cacheDir' 		=> $mosConfig_cachepath . '/',
		// флаг включения/отключения кэширования
		'caching' 		=> 1,
		// название группы объектов
		'defaultGroup' 	=> 'com_mycomponent',
		// время жизни кэша — 3600 секунд или 1 час
		'lifeTime' 		=> 3600
	);

// получаем экземпляр JCache_Lite_Function для нашего расширения
$cache = new JCache_Lite_Function( $options );

// вызываем функцию посредством менеджера кэша JCache_Lite_Function
echo $cache->call('myfunction', $arg1, $arg2, $arg3 );

Принцип работы данного примера отличается от предыдушего только тем, что мы явно включаем использование кэширования (вне зависимости от настроек Joomla) и указываем свое время жизни кэша.

Joomla!® CMS — пожалуй, лучшая система управления контентом с открытым исходным кодом

Логотип Joomla

Joomla! — это больше, чем просто программное обеспечение, это люди, включающие разработчиков, дизайнеров, системных администраторов, переводчиков, копирайтеров, и, что самое главное — простых пользователей.

Мы рады пригласить вас в ряды нашего сообщества!

Свернуть

Коротко о главном в Joomla

Новости портала

Новое в блогах

Видео

Форум о Joomla