TUTORIELS 
PHP et les systèmes de caches
(Fourni par Direction|PHP)

Page 1 | 2 | 3 | 4

L'essentiel sur les différents systèmes, et une mise en application du caching avec PEAR/Cache_Lite
 (Janvier 2004)
 
* A LIRE Les solutions de caching en PHP4
* Le caching pour accélérer et alléger le réseau
(JDNet Solutions)
Utilisation de PEAR/Cache/Lite/Function.php
Pour finir, étudions un cas plus particulier : la mise en cache des appels à certaines fonctions ou méthodes de votre programme. Si vous avez des fonctions lourdes dont le résultat ne change pas souvent, vous pouvez utiliser le module Cache_Lite_Function pour mettre en cache leurs appels sans pour autant cacher le reste de la page.
Reprenons notre exemple précédent en créant une fonction :

<?php
$val = divisible(7);
echo($val);

echo(date('H:i:s'));
echo('<br>');

$val = divisible(9);
echo($val);

function divisible($nbr) {
  for($i = 0; $i<10000 ; $i++) {
    if (($i % $nbr)==0) {
      echo($i);
      echo('<br>');
      }
    }
  return 'valeur retournée inutile mais c\'est pour l\'exemple<br>';
  }
?>


Effectuons maintenant la même chose mais en utilisant Cache_Lite_Output pour cacher les appels de fonction. Pour simplifier, le cache aura une durée de vie de 30 secondes pour les deux blocs.

<?php
// On charge Cache_Lite
require_once('Cache/Lite/Function.php');

// On définit quelques options :
// - le répertoire où seront stockés les fichiers de cache
// - la durée de vie du cache (ici 30 secondes)
$options = array(
  'cacheDir' => '/tmp/',
  'lifeTime' => 30
  );

// On crée un objet Cache_Lite_Output
$Cache_Lite_Output = new Cache_Lite_Function($options);

// Appel à la fonction en intégrant la gestion du cache
$val = $Cache_Lite_Output->call('divisible', 7);
echo($val);

echo(date('H:i:s'));
echo('<br>');

// Appel à la fonction en intégrant la gestion du cache
$val = $Cache_Lite_Output->call('divisible', 9);
echo($val);

function divisible($nbr) {
  for($i = 0; $i<10000 ; $i++) {
    if (($i % $nbr)==0) {
      echo($i);
      echo('<br>');
      }
    }
  return 'valeur retournée inutile mais c\'est pour l\'exemple<br>';
  }
?>

Encore une fois, la mise en œuvre est très simple. On a simplement remplacé l'appel de la fonction par un appel à Cache_Lite_Function en lui passant le nom de la fonction et ses paramètres. La gestion du cache est automatique. Si le résultat de la fonction pour les paramètres donnés a déjà été calculé, le cache sera utilisé sinon la fonction sera appelée...

Quant aux performances, on conserve 130 requêtes par seconde avec cette dernière version, alors que le script original sans cache arrive péniblement à 20 requêtes par seconde.

D'autres subtilités sont possibles avec Cache_Lite_Output, notamment pour cacher des appels de méthodes, mais cela sortirait du cadre de cet article. Referez-vous au fichier d'exemple fourni avec le package de Cache_Lite si vous voulez en savoir un peu plus.

Conclusion : cache ou pas cache ?
Nous arrivons au terme de cet article. Même si l'on s'est arrêté sur une solution de cache côté script, nous avons vu rapidement les diverses solutions de cache que l'on peut utiliser avec PHP.

Alors, cache ou pas cache ?

En premier lieu, tout dépend de votre type d'hébergement :
- si vous êtes en hébergement mutualisé, la question devient : cache côté script ou pas de cache du tout ;
- si vous êtes en hébergement dédié chez un prestataire, vous pouvez également vous poser la question du cache d'opcode ;
- si vous êtes votre propre hébergeur, vous pouvez étudier également la possibilité d'un cache système.

Un cache système est quelque chose de complexe qui sort très largement du cadre de cet article. C'est un choix d'architecture redoutablement efficace, qui demande des moyens et de fortes compétences en administration système.

Pour ce qui est du cache d'opcode, la question est plus simple. Si vous n'avez pas peur de mettre les mains dans votre installation PHP, c'est une manière très simple de booster vos performances sans retoucher la moindre ligne de code. Il est particulièrement recommandé dans le cas de scripts PHP longs et complexes.

Le cache " côté script " est la solution la plus souple, à condition de ne pas avoir peur de plonger dans votre code PHP. Si le cache est bien géré, les résultats sont excellents. Cependant il est difficile de l'utiliser dans le cas d'un script déjà écrit, surtout si vous n'en êtes pas l'auteur. C'est donc plus un choix à prendre au lancement d'un projet.

Forums
* Discutez en sur les forums

Pour conclure et même si toutes les situations ne s'y prêtent pas, l'utilisation d'un cache est un excellent moyen de donner un coup de fouet à vos serveurs web poussifs. Au final, en utilisant une solution de cache, vous réaliserez des économies, au niveau du processeur, mémoire, nombre et puissance des serveurs web. Mais surtout, vous augmentez la réactivité de vos pages vis-à-vis de vos utilisateurs. Outre le confort de navigation, c'est primordial si vous désirez donner une impression de confiance et de professionnalisme.

Page 1 | 2 | 3 | 4

 
[ Fabien MartyDirection|PHP pour JDNet
 
Accueil | Haut de page