Accueil > php > system-cache-php

{ Système de cache en php }

Introduction

Dans le cadre de l'optimisation d'un site, l'un des outils les plus puissants qui soit reste le système de cache

Ci-dessous l'arborescence de notre système de cache :

    • .htaccess
    • cache.php
  • index.php

Utilité

Première question à soulever, l'utilité ? Ou autrement formulée, quel intérêt ai-je à intégrer un système de cache sur mon site ? A vous de voir bien évidemment si vous en avez réellement besoin, il est bien sur entendu que si votre site est déjà bien optimisé et rapide à l'affichage, alors vous n'en aurez pas forcément l'utilité, par contre, si votre site est gourmand, lourd et long au chargement vous aurez tout intérêt à utiliser un système de cache.

Il faut savoir qu'un grand nombre de site fonctionne en exécutant du code PHP qui va lui même générer du code XHTML après de nombreux processus qui peuvent s'avérer longs pour certains. Comptez donc qu'au moment où vous appelez une page web il va probablement y avoir des requêtes MySQL, du parsage, des boucles, etc.), toutes ces opérations ralentissent naturellement l'affichage de la page finale.

Le concept du cache est donc de mettre en mémoire dans un fichier quelque part sur le serveur le résultat XHTML de tout ce qui a été généré, lorsque que quelqu'un cherchera à afficher la page concernée, le système de cache va donc avant toute chose, vérifier si le contenu enregistré précédement est toujours actuel, si tel est le cas alors pas besoin de refaire toutes les requêtes MySQL, le parsage et les boucles pour afficher la page ! On va directement récupérer le résultat XHTML dans le fichier du cache

En résumé, si votre site est beaucoup visité, l'économie en ressources pour le serveur sera énorme, mais au delà de l'économie de ressources pour le serveur il est essentiel que vos visiteurs puissent accéder à votre site rapidement ;-)

La classe

Passons aux choses concrètes ! Notre système de cache se basera sur une classe PHP qui contient les fonctions de mise en cache et de comparaison des fichiers

<?php

class Cache{

// Adresse de la page mise en cache
private $page;
// Temps avant regénération du cache en secondes
private $expiration;
// Contenu de la page mise en cache
private $tampon;

// DEFINITIONS DU CONSTRUCTEUR
function __construct($page){
$this->page = 'cache/'.$page.'.tmp';
}

// GETTERS
public function getPage() { return $this->page; }

// SETTERS
public function setPage($set) { $this->page = $set; }

// METHODES
public function cacheView(){
if(file_exists($this->page))
{
$jourFichier = date("Ymd", filemtime($this->page));
$jourNow = date("Ymd");

if($jourFichier==$jourNow)
{
readfile($this->page);
exit();
}
}
}

public function tamponStart() { ob_start(); }
public function tamponEnd() {
$this->tampon = ob_get_contents();
ob_end_clean();
file_put_contents($this->page,$this->tampon);
echo $this->tampon;
}
}
?>

Mise en cache

Maintenant que notre classe est en place, il nous reste pluq qu'à faire appel à cette dernière pour mettre en cache les pages de notre site

<?php
/******************************************************
* UTILISATION DU SYSTEME DE CACHE *
******************************************************/>
// On appelle le fichier contenant la classe
require 'class/cache.php';

// On instancie un nouvel objet cache et on lui passe en paramètre le nom de la page
// Ce nom doit être unique pour chaque page car il va générer un fichier du même nom
$cache = new Cache("index");

// Si le cache est à jour la methode cacheView l'affiche et le reste du code est ignoré
$cache->cacheView();

// la méthode tamponStart, enregistrera tout ce qui suit en mémoire tampon
$cache->tamponStart();

// Ici on affiche le code de la page, vos requêtes SQL etc ... =)
echo "ouais gros !\n";

// La page est finit on enregistre tout le contenu qu'elle génère et on l'enregistre
$cache->tamponEnd();

echo 'Version Sans Cache !';
?>