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

Il caching si usa per velocizzare una chiamata a display() o fetch() salvando il suo output su un file. Se una versione della chiamata è disponibile in cache, viene visualizzata questa invece di rigenerare l'output. Il caching può velocizzare tremendamente le cose, specialmente con i template che richiedono maggiori tempi di elaborazione. Se l'output di display() o fetch() viene salvato in cache, un file della cache può concettualmente essere composto di diversi file di template, di configurazione ecc.

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.)

Example 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.

Example 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.

Example 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.

Example 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().

Example 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');
?>

    

Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors