Документация Smarty


Глава 14. Кэширование

Кэширование используется для ускорения вызовов display() или fetch() при помощи сохранения результатов их работы в файл. Если доступна кэшированная версия вызова, она отображается вместо повторной обработки шаблона. Кэширование может значительно ускорить работу, особенно в случае длительно обрабатываемых шаблонов. Так как результат работы методов display() или fetch() кэшируется, один файл кэша вполне может состоять из нескольких файлов шаблонов, конфигурационных файлов и т.д.

Так как шаблоны динамичны, очень важно быть осторожным относительно того, что вы кэшируете и на какой период. Например, если вы отображаете главную страницу вашего сайта, которая меняет своё содержимое достаточно редко, хорошей идеей может быть кэширование этой страницы на час и более. С другой стороны, если вы отображаете страницу с картой погоды, которая обновляется ежеминутно, смысла в кэшировании этой страницы нет.

Настройка кэширования

Прежде всего, кэширование необходимо активировать. Это можно сделать, установив $caching = true (или 1).

Пример 14-1. Включение кэширования

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

$smarty->display('index.tpl');

При включенном кэшировании, вызываемая функция display('index.tpl') интерпретирует шаблон как обычно, но также сохраняет копию вывода в файл (кэшированую копию) в $cache_dir. При следующем вызове display('index.tpl'), вместо повторной интерпретации шаблона, будет использована кешированая копия.

Техническое замечание: Файлы в директории $cache_dir имеют те же имена, что и соответствующие шаблоны. Их имена оканчиваются расширением ".php", но на самом деле они не являются выполняемыми php-скриптами. Не редактируйте эти файлы!

Каждая кэшированая страничка существует на протяжении определенного времени, указанного в $cache_lifetime. Значение по умолчанию равно 3600 секундам или 1 часу. После того, как это время истекает, кэш обновляется. Существует возможность присвоить каждой кэшированой страничке собственное время жизни, установив $caching = 2. Смотрите документацию $cache_lifetime для получения подробных сведений.

Пример 14-2. Установка собственного cache_lifetime для кэшированой копии

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = 2; // Срок действия только для этой копии

// устанавливаем cache_lifetime для index.tpl в 5 минут
$smarty->cache_lifetime = 300;
$smarty->display('index.tpl');

// устанавливаем cache_lifetime для home.tpl в 1 час
$smarty->cache_lifetime = 3600;
$smarty->display('home.tpl');

// Примечание: следующая $cache_lifetime настройка не будет работать, когда $caching = 2.
// Срок жизни кэша для home.tpl уже был установлен
// в 1 час, и Smarty больше не будет обращать внимание на значение $cache_lifetime.
// Время жизни кэша home.tpl по прежнему будет истекать по прошествию одного часа.
$smarty->cache_lifetime = 30; // 30 секунд
$smarty->display('home.tpl');

Если включен параметр $compile_check, то каждый файл шаблона и конфигурации, связанный с файлом кэша, проверяется на наличие изменений. Если один из этих файлов был модифицирован с тех пор, как кэш был создан, кэш немедленно обновляется. Это незначительно повышает нагрузку, поэтому, для оптимальной производительности оставьте значение $compile_check равным false.

Пример 14-3. Включение $compile_check

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;
$smarty->compile_check = true;

$smarty->display('index.tpl');

Если $force_compile активирован, файлы кэша всегда будут обновляться. Это средство можно использовать для отключения кэширования во время отладки. $force_compile обычно используется только в целях отладки, так как более правильным способом отключения кеширования является установка $caching = false (или 0).

Функция is_cached() может быть использована для определения, имеется ли у шаблона работоспособный кэш. Если у вас есть кэшированый шаблон, которому необходимо, например, получить выборку из базы данных, вы можете использовать эту функцию, чтобы пропустить процесс обращения к базе.

Пример 14-4. Использование is_cached()

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

if(!$smarty->is_cached('index.tpl')) {
	// Кэш отсутствует, значит присваеваем значения переменным.
	$contents = get_database_contents();
	$smarty->assign($contents);
}

$smarty->display('index.tpl');

Вы можете сделать так, чтобы часть страницы оставалась динамической, даже если страница кэшируется, при помощи встроенной функции insert. Например, кэшироваться может вся страница, за исключением баннера. Используя функцию insert для баннера, вы можете сохранять этот элемент динамичным, внутри кэшированой странички. Смотрите документацию по insert для получения подробностей и примеров.

Очистить все файлы кэша можно при помощи функции clear_all_cache(), а конкретный файл кэша (или группу) - вызвав clear_cache() функцию.

Пример 14-5. Очистка кэша

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

// очищаем все файлы кэша
$smarty->clear_all_cache();

// очищаем только кэш шаблона index.tpl
$smarty->clear_cache('index.tpl');

$smarty->display('index.tpl');
SAPE все усложнил?

MainLink - простая и прибыльная продажа ссылок!

Последние поступления:

Размещена 10 августа 2020 года

Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
Я не понял, что это они с Германией сделать хотят?!

читать далее…

ТехЗадание на Землю

Размещена 14 марта 2018 года

Пpоект Genesis (из коpпоpативной пеpеписки)

читать далее…

Шпаргалка по работе с Vim

Размещена 05 декабря 2017 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

читать далее…

Ошибка: Error: Cannot find a valid baseurl for repo

Размещена 13 сентабря 2017 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

читать далее…

Linux Optimization

Размещена 30 июля 2012 года

Prelink

читать далее…