Mise en place d’un système de cache pour son site
D’abord c’est quoi un système de cache ?
C’est tous simplement une méthode utiliser pour réduire la charge au serveur en effet nombreux ce qui ont été révoqué par leur hébergeur a cause de la consommation excessives de ressource par leur application.
Mais qu’est ce qui consomme énormément les ressources serveur ?
En généralement les requêtes SQL surtouts pour les sites qui utilises les news le livres d’or ou toutes autre fonctions faisant appel à MySQL
Dois-je à tout prix intégrer un système de cache pour mon site ?
Ceci ne dépendra que de votre application si vous comptabiliser par exemple la vue de votre page si le nombre de page vue par minute atteint les 200 par minute cela va sans dire que vous aurez besoins de cache si vous ne voulez pas être mis dehors par votre hébergeur !!
Le cache est utiliser suivant le langage mais dans notre cas en PHP on s'en sert pour éviter à chaque chargement de page d'exécuter les requêtes sql dans ce cas le système de cache va effectuer ceci
- L’utilisateur veut accéder à une page qui exécute une avalages de requêtes sql
- Le système vérifie si cette page a un cache là deux cas se présente
- si le cache existe pour cette page il vérifie la date de sa dernière modification en la comparant a un intervalle qui lui a été définit si le cache de la page est toujours valide il n’effectue pas de requête SQL et il affiche juste « le serveur est soulager » sinon il recrée le cache
- Si le cache n’existe pas il sera crée
Maintenant que vous savez ce que c’est un cache a quoi il sert et vous avez comptabilisé 3000 requêtes par minute on passe a l’étape suivante
- Mise en place du système de cache
- Histoire de bien organiser notre projet créer un dossier nommé cache a la racine de votre site
- Créer une page qui s’appelle caching-head.php // cette page sera appelle au début de index.php
- Créer une autre page qui s’appelé caching-foot.php // ce page sera appeler en fin de index.php
- Et créer notre fameux index.php
Je vous passe les codes bien détaillé
< ?php
// On définit la duré de validité d’un fichier cache qui est de ici de 30 minute
$expireTime = time () -1800 ;
// On définie une variable de type bool qui est destiner a index.php pour dire
// si il doit ou non exécuter son code ou que le cache existe vous verre
// 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 durer a expirer oui 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 à expirer
// 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 expirer 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’exit pas on doit le créer
// on démarre la bufferisation
ob_start() ;
// Avec $caching a FALSE les scripts ci-dessous saurons qu’aucun cache
// n’existe pour cette url il doit être créé
}?>
< ?php
// On inclue caching-head.php
Include ‘caching-head.php’ ;
// On test maintenant la variable la variable $caching si on doit oui ou non
// exécuter notre code
If ( !$caching) {
// coder tous ce que vous semble bon tester par exemple avec l’affichage d’une
// liste de news ou d’articles dans votre base
}
// On inclue caching-foot.php
Include ‘caching-foot.php’ ;
?>
< ?php
// On test si on doit recrée oui 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éer 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érouler
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 charger par le navigateur elle contient le code permettant de traiter des donnes provenant de la base de données dans son tous début il fait appelle a caching-head.php qui permet de savoir si il y’a un cache ou non pour l’url courante à l’aide d’une variable booléenne il dit a index.php d’exécuter oui ou non son traitement index.php doit tester si cette variable est a 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 a caching-foot.php qu’il a inclue en fin de page ce script quand doit soit créer/recréer le cache en se basant aussi sur la variable booléenne $caching
Je suis un peu feignant pour écrire un code de test mais vous avez juste a faire un select dans la page index.php pour récupérer des données d’une table si vous exécuter la page pour la première fois aller dans votre base de donnée et modifier 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éer
Bon voila la démarche à faire pour avoir un système de cache opérant mais opter pour l’améliorer surtout au niveau de la construction du nom du fichier cache et sachez que ce code est limiter s’il s’agit d’une page qui doit faire une pagination .
Je vous souhaite une bonne lecture et au fait les codes que j’ai écrit je l’ai écrit dans la follet et je ne les ai pas testé mais je serai la pour vos questions et suggestions