C'est tout simplement une méthode utilisée pour réduire la charge au serveur. En effet, nombreux sont ceux qui ont été révoqués par leur hébergeur à cause de la consommation excessives de ressources par leur application.
En général, les requêtes SQL, surtout pour les sites qui utilisent les news, un livre d'or ou toute autre fonction faisant appel à MySQL
Ceci ne dépendra que de votre application. Si vous comptabilisez, par exemple, la vue de votre page et que le nombre de page vues par minute atteint les 200, cela va sans dire. Vous aurez besoin de cache si vous ne voulez pas être mis dehors par votre hébergeur !!
Le cache est utilisé suivant le langage. Dans notre cas, en PHP, on s'en sert pour éviter à chaque chargement de page d'exécuter les requêtes sql.
Lorsque l'utilisateur veut accéder à une page qui exécute une avalanche de requêtes sql, le système de cache va effectuer ceci :
Le système vérifie si cette page a un cache. Ici deux cas se présentent :
Maintenant que vous savez ce que c'est un cache, à quoi il sert et que vous comptabilisez 3000 requêtes par minute, on passe a l'étape suivante.
Histoire de bien organiser notre projet :
Je vous passe les codes bien détaillés :
< ?php // On définit la duré de validité d'un fichier cache qui est de ici de 30 minutes $expireTime = time () -1800 ; // On définit une variable de type bool qui est destinée à index.php pour dire // si il doit ou non exécuter son code //ou si le cache existe, son utilisation par la suite $caching = FALSE ; // On récupère l'url $url = $_SERVER['REQUEST_URI'] ; // On transforme l'adresse en nom de fichier $url = str_replace('/','-',$url); // On construit le chemin de notre fichier cache $cacheFile = "cache/".$url. '.html' ; // On verifie maintenant si le fichier cache existe ou pas If( file_exists($cacheFile) ) { // Il existe. On doit maintenant vérifier si sa durée a expiré ou non // en utilisant la fonction // filemtime () qui revoit le timestamp au moment de la dernière // modification if (filemtime($cacheFile) < $expireTime) ) { // la page existe mais son cache a expiré // on démarre la bufferisation ob_start(); // Avec la variable $caching a FALSE le script caching-foot.php // saura qu'il doit recréer le cache } else { // la page existe et le cache n'a pas expiré alors on lit le fichier // on met $caching a TRUE pour dire a index.php n'exécute pas ton contenu // et à caching-foot.php de ne pas recréer le cache $caching = TRUE ; readfile($cacheFile); } } else { // Le fichier cache n'existe pas, on doit le créer // on démarre la bufferisation ob_start() ; // Avec $caching a FALSE les scripts ci-dessous sauront qu'aucun cache // n'existe pour cette url il doit être créé }?>
< ?php // On inclut caching-head.php Include 'caching-head.php' ; // On teste maintenant la variable $caching si on doit oui ou non // exécuter notre code if ( !$caching) { // codez ici tout ce que bon vous semble. // testez par exemple avec l'affichage d'une // liste de news ou d'articles dans votre base } // On inclut caching-foot.php Include `caching-foot.php' ; ?>
< ?php // On teste si on doit recréer ou non le cache If ( !$caching) { // Le cache n'existe pas on doit le créer // on récupère le contenu du buffer $buffer = ob_get_contents(); // on crée un cache pour l'url correspondante // on ouvre le fichier en mode création $fp = fopen($cacheFile, "w"); // Si l'ouverture du fichier s'est bien déroulée if ($fp) { // on écrit le contenu du buffer dans le fichier cache fputs($fp,$buffer); // On ferme le fichier fclose($fp); } // On efface le buffer et on affiche ob_clean() ; ob_end_flush() ; } ?>
Voila votre système de cache est en place voici le fonctionnement du script en résumé.
Index.php est la page de base. C'est elle qui sera chargée par le navigateur.
Elle contient le code permettant de traiter des données provenant de la base de données.
Dans son tout début, il (le code) fait appel à caching-head.php afin de savoir si il y a un cache ou non pour l'url courante.
A l'aide d'une variable booléenne, il dit à index.php d'exécuter ou non son traitement. index.php doit tester si cette variable est à TRUE ou FALSE. Si elle est à TRUE, il n'exécute pas son traitement, si non il l'exécute.
Après ça, il laisse la main à caching-foot.php qu'il a inclut en fin de page. Ce script, doit créer (ou recréer) le cache, en se basant également sur la variable booléenne $caching.
Je suis un peu feignant pour écrire un code de test.
Vous avez juste à faire un select dans la page index.php pour récupérer des données d'une table.
Si vous exécutez la page pour la première fois, allez dans votre base de données et modifiez manuellement l'une des valeurs de la table dont vous avez extrait les données.
Vous verrez que vos changement ne seront visible qu'au bout de 30 minutes, car c'est cette valeur qu'on a définit pour que le cache soit recréé.
Bon voila la démarche à faire pour avoir un système de cache opérant. Optez pour l'améliorer surtout au niveau de la construction du nom du fichier cache et sachez que ce code est limité, s'il s'agit d'une page qui doit faire une pagination .
Je vous souhaite une bonne lecture. Les codes que j'ai écrit, je les ai écrit à la volée et je ne les ai pas testé. Je serai la pour vos questions et suggestions.