Zend_Cache_Core
est un frontend sp�cial parce qu'il est le coeur du module.
C'est un frontend de cache g�n�rique et est �tendu par les autres classes.
![]() |
Note |
---|---|
Tous les frontends h�ritent de |
Ces options sont pass�es � la m�thode de fabrique comme montr�es dans les exemples pr�c�dents.
Tableau 4.1. Otions disponibles
Option | Type de donn�es | Valeur par d�faut | Description |
---|---|---|---|
caching |
bool�en |
true |
active / d�sactive le caching (peut-�tre tr�s utile pour les d�bogage de scripts en cache) |
lifeTime |
int |
3600 |
temps de vie (en secondes) du cache, si d�fini � null , le
cache est valide infiniment
|
logging |
bool�en |
false |
si d�finit � true, le logging par Zend_Log est activ�
(mais le syst�me sera plus lent)
|
writeControl |
bool�en |
true |
Active / d�sactive le contr�le d'�criture (le cache est lu juste apr�s l'�criture pour d�tecter des entr�es corrompues), activer writeControl va un tout petit peu ralentire l'�criture du cache, mais pas la lecture (il peut d�tecter des fichiers de cache corrompus, mais �a n'est pas un contr�le parfait). |
automaticSerialization |
bool�en |
false |
Active / d�sactive la s�rialization automatique, il peut �tre utilis� pour enregistrer directement des donn�es qui ne sont pas des cha�nes de caract�res (mais c'est plus lent). |
automaticCleaningFactor |
int |
0 |
Active / d�sactive le nettoyage automatique( garbage collector): 0 signifie aucun nettoyage automatique de cache, 1 signifie un nettoyage syst�matique du cache et x > 1 signifie le nettoyage al�atoire 1 fois toute les x �critures. |
Un exemple est donn� dans le manuel, tout au d�but.
Si vous stocker uniquement des cha�nes de caract�res dans le cache (parce qu'avec l'option "automaticSerialization", il est possible de stocker des bool�ns), vous pouvez utiliser une construction plus compact comme:
<?php // nous avons d�j� $cache $id = 'myBigLoop'; // id de cache de "ce que l'on veut cacher" if (!($data = $cache->get($id))) { // cache miss $data = ''; for ($i = 0; $i < 10000; $i++) { $data = $data . $i; } $cache->save($data); } // fait quelque chose avec $data (affichage, passage ailleurs, etc, etc) ?>
Si vous voulez cacher des blocs multiples ou des instances de donn�es, l'id�e reste la m�me:
<?php // on s'assure que l'on utilise des identifiant uniques $id1 = 'foo'; $id2 = 'bar'; // block 1 if (!($data = $cache->get($id1))) { // cache missed $data = ''; for ($i=0;$i<10000;$i++) { $data = $data . $i; } $cache->save($data); } echo($data); // �a n'est pas affect� par la mise en cache echo('NEVER CACHED! '); // block 2 if (!($data = $cache->get($id2))) { // cache missed $data = ''; for ($i=0;$i<10000;$i++) { $data = $data . '!'; } $cache->save($data); } echo($data); ?>
Zend_Cache_Frontend_Output
est un frontend capturant la sortie.
Il utilise la bufferisation de sortie de PHP pour capturer tout ce qui passe entre les m�thodes
start()
et end()
.
Ce frontend n'a pas d'options sp�cifiques autres que celles de Zend_Cache_Core
.
Un exemple est donn�e dans le manuel, tout au d�but. Le voici avec des changements mineurs:
<?php // s'il y a un cache miss, la bufferisation de sortie est lanc�e if(!$cache->start('mypage')): // affiche tout comme d'habitude echo 'Hello world! '; echo 'This is cached ('.time().') '; $cache->end(); // output buffering ends endif; echo 'This is never cached ('.time().').'; ?>
Utiliser cette forme est assez simple pour d�finir une mise de cache de sortie dans vos projets en production, avec peu de refactorisation de code.
Zend_Cache_Frontend_Function
met en cache les r�sultats des appels de fonction.
Elle a une seule m�thode principale appel�e call()
qui prend un nom de fonction
et des param�tres pour l'appel dans un tableau.
Tableau 4.2. Options disponibles
Option | Type de donn�es | Valeur par d�faut | Description |
---|---|---|---|
cacheByDefault |
bool�en |
true |
si true, les appels de fonction seront mis en cache par d�faut |
cachedFunctions |
array |
les noms de fonctions seront toujours mis en cache | |
nonCachedFunctions |
array |
les noms de fonctions ne doivent jamais �tre mis en cache |
Utiliser la fonction call()
est le m�me qu'utiliser le
code call_user_func_array()
en PHP:
<?php $cache->call('veryExpensiveFunc', $params); # $params est dans un tableau # par exemple, pour appeler (avec mise en cache) veryExpensiveFunc(1, 'foo', 'bar'), vous devriez utiliser # $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar')) ?>
Zend_Cache_Frontend_Function
est assez intelligente pour mettre en cache
la valeur de retour de la fonction, aisi que sa sortie interne.
![]() |
Note |
---|---|
Vous pouvez passer n'importe quelle fonction utilisateur � l'exception de
|
Zend_Cache_Frontend_Class
est diff�rent de Zend_Cache_Frontend_Function
parce qu'elle permet de mettre en cache les objets et les m�thodes statiques.
Tableau 4.3. Options disponibles
Option | Type de donn�es | Valeur par d�faut | Description |
---|---|---|---|
cachedEntity (required) |
mixed |
si d�finit � un nom de classe, nous allons mettre en cache une claisse abstraite et utiliser uniquement les appels statiques; si d�finis � un objet, nous allons mettre en cache les m�thodes de ces objets. | |
cacheByDefault |
bool�en |
true |
si true, les appels vont �tre cach� par d�fault |
cachedMethods |
array |
les noms des m�thodes qui seront toujours mis en cache | |
nonCachedMethods |
array |
les nomes des m�thodes qui ne doivent jamais �tre misent en cache |
Par exemple, pour mettre en cache des appels statiques:
<?php class test { # M�thode statique public static function foobar($param1, $param2) { echo "foobar_output($param1, $param2)"; return "foobar_return($param1, $param2)"; } } // [...] $frontendOptions = array( 'cachedEntity' => 'test' // Le nom de la classe ); // [...] # l'appel cach� $res = $cache->foobar('1', '2'); ?>
Pour mettre en cache des appels classiques aux m�thodes:
<?php class test { private $_string = 'hello !'; public function foobar2($param1, $param2) { echo($this->_string); echo "foobar2_output($param1, $param2)"; return "foobar2_return($param1, $param2)"; } } // [...] $frontendOptions = array( 'cachedEntity' => new test() // Une instance de la classe ); // [...] # L'appel mis en cache $res = $cache->foobar2('1', '2'); ?>
Zend_Cache_Frontend_File
est un frontend conduit par la modification
d'un "fichier ma�tre". C'est vraiment int�ressant, par exemple, dans les probl�matiques
de configuration ou de templates.
Pour l'instant, vous avez un fichier de configuration XML qui est pars� par une
fonction qui retourne un "objet config" (comme avec Zend_Config
).
Avec Zend_Cache_Frontend_File
, vous pouvez stocker l'objet config dans le cache
(pour �viter de parser le XML du fichier de config chaque fois) mais avec une sorte de
forte d�pendance au fichier ma�tre. Ainsi si le fichier XML de config est modifi�, le cache
est imm�diatement invalid�.
Zend_Cache_Frontend_Page
est comme Zend_Cache_Frontend_Output
mais cr�� pour une page complete. Il est impossible d'utiliser Zend_Cache_Frontend_Page
pour mettre en cacher un bloc unique.
D'un autre c�t�, la "cache id", est calcul� automatiquement avec $_SERVER['REQUEST_URI']
et
(en fonction des options) $_GET
, $_POST
, $_SESSION
,
$_COOKIE
, $_FILES
.
De plus, vous avez seulement une m�thode pour appeler (start()
)
parce que l'appel � end()
est totalement automatique lorsque la page est termin�.
Pour le moment, �a n'est pas impl�ment� mais nous pr�voyons d'ajouter un syst�me de condition HTTP pour �conomiser de la bande passant. (le syst�me enverra une ent�te HTTP 304 Not Modified si le cache est trouv�, et si le navigateur a d�j� la bonne version).
![]() |
Note |
---|---|
Zend_Cache_Frontend_Page est vraiment en version alpha, et est pr�vue d'�tre am�lior� plus tard. |
Tableau 4.5. Options disponibles
Option | Type de donn�es | Valeur par d�faut | Description |
---|---|---|---|
httpConditional |
bool�en |
false |
utilisez le syst�me httpConditionnal ou pas (pas encore impl�ment�) |
debugHeader |
bool�en |
false |
si true, un text de d�bogage est ajout� avant chaque page de cache |
defaultOptions |
array |
array(...see below...) |
un tableau associatif d'options par d�faut:
|
regexps |
array |
array() |
un tableau associatif pour d�finir les options, uniquement pour des REQUEST_URI, les cl�s sont des regex PCRE, les valeurs sont des tableaus associatifs avec des options sp�cifiques pour d�finir si les correspondances des regexs dans $_SERVER['REQUEST_URI'] (voir les options par d�faut pour la liste des options disponibles) ; si plusieurs regexs correspondent � un $_SERVER['REQUEST_URI'], seul la derni�re sera utilis�e. |
Utilisation de Zend_Cache_Frontend_Page est vraiment trivial :
<?php // [...] // require, configuration et factory $cache->start(); // si le cache est trouv�, le r�sultat est envoy� au navigateur et le script s'arr�te l� // reste de la page ... ?>
un exemple plus complexe qui montre un moyen pour obtenir une gestion centralis�e du cache dans un fichier d'amor�age (pour utiliser avec Zend_Controller par exemple)
<?php // vous devriez �viter de mettre trop de lignes avant la section de cache // [...] par exemple, pour des performances optimales, "require_once" ou "Zend::loadClass" devrait �tre // [...] apr�s la section de cache require_once 'Zend/Cache.php'; $frontendOptions = array( 'lifeTime' => 7200, 'debugHeader' => true, // for debuging 'regexps' => array( '^/$' => array('cache' => true), // met en cache la totalit� d'IndexController '^/index/' => array('cache' => true), // met en cache la totalit� d'IndexController '^/article/' => array('cache' => false), // nous ne mettons pas en cache l'ArticleController... '^/article/view/' => array( // ...mais nous mettons en cache l'action "view" 'cache' => true, // de cet ArticleController 'cacheWithPostVariables' => true, // et nous mettons en cache m�me lorsqu'il y a des variables dans $_POST 'makeIdWithPostVariables' => true, // (mais le cache sera d�pendent du tableau $_POST) ) ) ); $backendOptions = array( 'cacheDir' => '/tmp/' ); // obtenir un objet Zend_Cache_Frontend_Page $cache = Zend_Cache::factory('Page', 'File', $frontendOptions, $backendOptions); $cache->start(); // si nous trouvons un cache, le r�sultat est envoy� au navigateur, et le script s'arr�te l� // [...] la fin du fichier de d�marrage ( ces lignes ne seront pas ex�cut�e si on trouve un cache) ?>