Get Smarty

Donate

Paypal

Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

Chapter 14. Caching

Caching é usado para aumentar a velocidade de chamada para display() ou fetch() salvando isso num arquivo de saída. Se há uma versão de cache disponível para a chamada, isso é mostrado ao invés de regerar a saída de dados. Caching pode fazer coisas tremendamente rápidas, especialmente templates com longo tempo computacional. Desde a saída de dados do display() ou fetch() está em cache, um arquivo de cache poderia ser composto por diversos arquivos de templates, arquivos de configuração, etc.

Desde que templates sejam dinâmicos, é importante isso ter cuidado com o que você está fazendo cache e por quanto tempo. Por exemplo, se você está mostrando a página principal do seu website na qual as alterações de conteúdo são muito frequentes, isso funciona bem para cache dessa por uma hora ou mais. Um outro modo, se você está mostrando uma página com um mapa do tempo contendo novas informações por minuto, não faz sentido fazer cache nesta página.

Configurando Caching

A primeira coisa a fazer é habilitar o caching. Isso é feito pela configuração $caching = true (or 1.)

Example 14.1. Habilitando Caching

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

$smarty->caching = true;

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

Com caching habilitado, a chamada para a função display('index.tpl') irá trazer o template como usual, mas também salva uma cópia disso para o arquivo de saída (uma cópia de cache) in the $cache_dir. Na próxima chamada de display('index.tpl'), a cópia em cache será usada ao invés de trazer novamente o template.

Notas Técnicas

Os arquivos no $cache_dir são nomeados com similaridade ao nome do arquivo de template. Embora eles terminem com a extensão ".php", eles não são realmente scripts executáveis de php. Não edite estes arquivos!

Cada página em cache tem um período de tempo limitado determinado por $cache_lifetime. O padrão do valor é 3600 segundos, ou 1 hora. Após o tempo expirar, o cache é regerado. É possível dar tempos individuais para caches com seu próprio tempo de expiração pela configuração $caching = 2. Veja a documentação em $cache_lifetime para detalhes.

Example 14.2. Configurando cache_lifetime por cache

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

$smarty->caching = 2; // lifetime is per cache

// set the cache_lifetime for index.tpl to 5 minutes
$smarty->cache_lifetime = 300;
$smarty->display('index.tpl');

// set the cache_lifetime for home.tpl to 1 hour
$smarty->cache_lifetime = 3600;
$smarty->display('home.tpl');

// NOTE: the following $cache_lifetime setting will not work when $caching = 2.
// The cache lifetime for home.tpl has already been set
// to 1 hour, and will no longer respect the value of $cache_lifetime.
// The home.tpl cache will still expire after 1 hour.
$smarty->cache_lifetime = 30; // 30 seconds
$smarty->display('home.tpl');

Se $compile_check está habilitado, cada arquivo de template e arquivo de configuração que está envolvido com o arquivo em cache é checado por modificações. Se algum destes arquivos foi modificado desde que o último cache foi gerado, o cache é imediatamente regerado. Isso é ligeiramente uma forma de optimização de performance de overhead, deixe $compile_check setado para false.

Example 14.3. Habilitando $compile_check

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

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

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

Se $force_compile está habilitado, os arquivos de cache irão sempre ser regerados. Isso é efetivamente desativar caching. $force_compile é usualmente para propósitos de debug somente, um caminho mais eficiente de desativar caching é setar o $caching = false (ou 0.)

A função is_cached() pode ser usada para testar se um template tem um cache válido ou não. Se você tem um template com cache que requer alguma coisa como um retorno do banco de dados, você pode usar isso para pular este processo.

Example 14.4. Usando is_cached()

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

$smarty->caching = true;

if(!$smarty->is_cached('index.tpl')) {
	// No cache available, do variable assignments here.
	$contents = get_database_contents();
	$smarty->assign($contents);
}

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

Você pode deixar partes da sua página dinâmica com a função de template insert. Vamos dizer que sua página inteira pode ter cache exceto para um banner que é mostrado abaixo do lado direito da sua página. Usando uma função insert para o banner, você pode deixar esse elemento dinâmico dentro do conteúdo de cache. Veja a documentação em insert para detalhes e exemplos.

Você pode limpar todos os arquivos de cache com a função clear_all_cache(), ou arquivos de cache individuais (ou grupos) com a função clear_cache().

Example 14.5. Limpando o cache

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

$smarty->caching = true;

// clear out all cache files
$smarty->clear_all_cache();

// clear only cache for index.tpl
$smarty->clear_cache('index.tpl');

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

Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors