Siccome i template sono dinamici, è importante stare attenti
a ciò che mettete in cache e per quanto tempo. Ad esempio, se
state visualizzando la home page del vostro sito, i cui contenuti
non cambiano troppo spesso, può essere utile mettere in cache
questa pagina per un'ora o più. D'altra parte, se state
visualizzando una pagina con una mappa del tempo atmosferico che
viene aggiornata di minuto in minuto, non avrebbe senso mettere
in cache questa pagina.
Impostare il Caching
La prima cosa da fare è abilitare il caching. Per farlo bisogna
impostare $caching = true (o 1.)
Esempio 14-1. abilitare il caching
<?php require('Smarty.class.php'); $smarty = new Smarty;
$smarty->caching = true;
$smarty->display('index.tpl'); ?>
|
|
Col caching abilitato, la chiamata alla funzione display('index.tpl')
causa la normale generazione del template, ma oltre a questo salva
una copia dell'output in un file (la copia in cache) nella $cache_dir. Alla chiamata successiva
di display('index.tpl'), verrà usata la copia in cache invece di
generare di nuovo il template.
Nota tecnica:
I file nella $cache_dir vengono chiamati con nomi simili al nome del
template. Sebbene abbiano l'estensione ".php", in realtà non sono
script php eseguibili. Non editateli!
Ogni pagina in cache ha un tempo di vita limitato, determinato da
$cache_lifetime. Il
valore di default è 3600 secondi, cioè 1 ora. Dopo questo tempo, la
cache viene rigenerata. E' possibile dare a file singoli il proprio
tempo di scadenza impostando $caching = 2. Consultate la documentazione
di $cache_lifetime per i dettagli.
Esempio 14-2. impostare cache_lifetime per singolo file di cache
<?php require('Smarty.class.php'); $smarty = new Smarty;
$smarty->caching = 2; // la durata è per singolo file
// impostiamo il cache_lifetime per index.tpl a 5 minuti $smarty->cache_lifetime = 300; $smarty->display('index.tpl');
// impostiamo il cache_lifetime per home.tpl a 1 ora $smarty->cache_lifetime = 3600; $smarty->display('home.tpl');
// NOTA: l'impostazione seguente di $cache_lifetime non funzionerà // con $caching = 2. La scadenza per home.tpl è stata già impostata // a 1 ora, e non rispetterà più il valore di $cache_lifetime. // La cache di home.tpl scadrà sempre dopo 1 ora. $smarty->cache_lifetime = 30; // 30 seconds $smarty->display('home.tpl'); ?>
|
|
Se $compile_check è abilitato,
tutti i file di template e di configurazione che sono coinvolti nel file
della cache vengono verificati per vedere se sono stati modificati. Se qualcuno
dei file ha subito una modifica dopo che la cache è stata generata, il file
della cache viene rigenerato. Questo provoca un piccolo sovraccarico, quindi,
per avere prestazioni ottimali, lasciate $compile_check a false.
Esempio 14-3. abilitare $compile_check
<?php require('Smarty.class.php'); $smarty = new Smarty;
$smarty->caching = true; $smarty->compile_check = true;
$smarty->display('index.tpl'); ?>
|
|
Se $force_compile è abilitato,
i file della cache verranno sempre rigenerati. Di fatto questo disabilita
il caching. $force_compile normalmente serve solo per scopi di debug, un
modo più efficiente di disabilitare il caching è di impostare $caching = false (o 0.)
La funzione is_cached() può essere
usata per verificare se un template ha una cache valida oppure no. Se avete
un template in cache che necessita di qualcosa come una lettura da un
database, potete usare questa funzione per saltare quella parte.
Esempio 14-4. uso di is_cached()
<?php require('Smarty.class.php'); $smarty = new Smarty;
$smarty->caching = true;
if(!$smarty->is_cached('index.tpl')) { // Non c'è cache disponibile, assegnamo le variabili qui. $contents = get_database_contents(); $smarty->assign($contents); }
$smarty->display('index.tpl'); ?>
|
|
Potete mantenere parti di una pagina dinamiche con la funzione del template
insert. Diciamo che l'intera
pagina può essere messa in cache eccetto un banner che viene visualizzato
in fondo a destra nella page. Usando la funzione insert per il banner, potete
tenere questo elemento dinamico all'interno del contenuto in cache. Consultate
la documentazione su insert per
dettagli ed esempi.
Potete eliminare tutti i file della cache con la funzione clear_all_cache(), o singoli
file della cache (o gruppi di file) con la funzione clear_cache().
Esempio 14-5. eliminare la cache
<?php require('Smarty.class.php'); $smarty = new Smarty;
$smarty->caching = true;
// eliminiamo tutti i file della cache $smarty->clear_all_cache();
// eliminiamo solo la cache di index.tpl $smarty->clear_cache('index.tpl');
$smarty->display('index.tpl'); ?>
|
|