Introduction
Le système de cache vous permet de conserver les résultats de traitements couteux en temps processeur, et donc de pouvoir les réutiliser en un temps record.
L'objet qui pose problème
Supposez l'objet suivant, avec une méthode complexe qui met un temps fou à calculer son résultat :
class ObjetComplexe {
public function operationComplexe ($num1, $num2){
sleep (2);
return $num1+$num2;
}
}
Sans le cache
Vous développez un site traitant des mathématiques, vous avez donc besoin de faire souvent appel à cet objet pour présenter les résultats de vos recherches, par exemple comme suit :
class ActionGroupOperationsMathematiques extends CopixActionGroup {
function processDefault (){
$ppo = new CopixPPO ();
$ppo->resultatOperation = _ioClass ('monmodule|ObjetComplexe')->operationComplexe (2, 2);
return _arPpo ($ppo, 'resultatoperation.tpl');
}
}
Faire attendre chaque internaute 2 secondes n'est pas envisageable, d'autant plus si chaque demande de page essouffle le serveur.
C'est là que CopixCache intervient !
Avec le cache
Vous pouvez choisir de faire intervenir CopixCache où bon vous semble. Pour l'exemple, nous allons le placer dans l'action.
class ActionGroupOperationsMathematiques extends CopixActionGroup {
function processDefault (){
$ppo = new CopixPPO ();
if (!CopixCache::exists ('operationComplexe')) { //On regarde si le cache a déjà été stocké
$ppo->resultatOperation = _ioClass ('monmodule|ObjetComplexe')->operationComplexe (2, 2);
CopixCache::write ('operationComplexe', $ppo->resultatOperation); // On stocke le résultat du traitement en cache
} else {
$ppo->resultatOperation = CopixCache::read ('operationComplexe'); // Le traitement a été stocké, on récupère le résultat
}
return _arPpo ($ppo, 'resultatoperation.tpl');
}
}
La première demande de page mettra ainsi 2 bonnes secondes à s'afficher, alors que la deuxième demande sera quasi instantanée !
Remise à zéro du cache
De temps à autres, vous aurez besoin de remettre le cache à zéro (modification de l'algorithme de calcul, modification effectuée dans les données sources, ...).
Pour ce faire, CopixCache permet la remise à zéro du cache en question avec une simple commande.
CopixCache::clear('operationComplexe');

