Testez les performances de votre site

 
Catégories du blog

Créer un système de cache pour vos pages PHP

Le mardi 06 avril 2010 dans Performances web et Scripts - 6 commentaires

Votre hébergement mutualisé commence à se sentir un peu trop à l'étroit avec tous les internautes qui visitent votre site? Vos scripts ne parviennent plus à se connecteur à la base de données submergée de requêtes et renvoient un malheureux "Too many connections"? Avant de songer à gonfler votre offre d'hébergement, installez un système de mise en cache!

Cet article vous guidera pas à pas pour installer un système de cache simple mais efficace sur vos scripts PHP.

Plusieurs méthodes permettent d'accélérer le temps de réponse de vos pages PHP. La première est d'optimiser votre code et de lancer des benchmarks pour trouver les points d'engorgement et ainsi améliorer vos algorithmes. Mais cela ne suffit pas dans tous les cas, et un trop fort trafic peut venir à bout de vos ressources CPU même si votre code est le plus optimisé possible.

Très souvent, c'est la base de données qui est coupable de ralentir vos pages. Vous pouvez créer des indexs, configurer au mieux ses paramètres ou modifier la structure des tables, mais la solution est parfois plus simple. Est-il nécessaire de vérifier le prix ou la description d'un produit à chaque fois qu'un internaute visite sa page? Ces données sont souvent valides pour plusieurs jours et garder une copie statique de ces informations permet de réduire le nombre de requêtes à la base de données et ainsi la libérer pour des traitements plus importants.

Déterminer le code à mettre en cache

La première étape pour installer un système de mise en cache est de déterminer, dans la structure de votre site, quelles sont les parties de votre code qui peuvent être enregistrées dans un fichier.

Dans un site de vente en ligne, pour reprendre l'exemple précédent, le prix ou la description d'un produit sont des données qui ne varieront pas d'un internaute à un autre. Mais le panier ou la zone d'identification sont modifiés régulièrement, il ne faudra donc pas les mettre en cache.

Ajouter le script PHP de gestion du cache

Une fois que vous avez isolé quel contenu peut être mis en cache dans votre site, voici le code à mettre en place sur vos scripts php :

<?php
//durée d'expiration en secondes d'une page mise en cache
$timeout = 3600;

//on lit l'adresse de la page
$url = $_SERVER['REQUEST_URI'];

// on transforme l'adresse en nom de fichier
$url = ereg_replace('/','-',$url); 

// si l'adresse est la racine du site, on change le nom en index.html
if($url  == "-") $url = "-index.html";

// on construit le chemin du fichier cache de la page
$fichier_cache = "cache/cache".$url; 

//on vérifie si la page n'existe pas dans le cache ou si elle a expiré
if (@filemtime($fichier_cache) < (time() - $timeout)) {	   
	//on va récupérer les données pour les mettre en cache
	//pour cela on démarre la bufferisation de la page
	ob_start();	
	?>
	
	... contenu et traitements php...
	
	<?php
	//on récupère le contenu du buffer et on l'arrête
	$cache = ob_get_contents();
	ob_end_flush();

	// on ouvre le fichier cache	 
	$fd = fopen($fichier_cache, "w"); 
	if ($fd) {
	   	// on ecrit le contenu du buffer dans le fichier cache
		fwrite($fd,$cache);
		fclose($fd);
	 }
}
else  {
	// le fichier cache existe déjà et est valide, on l'affiche
	include($fichier_cache); 
}
?>

Ce script se déroule en plusieurs étapes :

  1. Lecture de l'url et création du nom du fichier de cache
  2. Vérification de la présence de ce fichier dans le dossier de cache et test sur l'expiration du fichier
  3. (A) Le cache est valide, on inclut le fichier de cache
    (B) Le cache n'existe pas ou est périmé, on crée le fichier de cache

Pensez bien à créer le dossier de cache et à autoriser le serveur à y écrire des données.

Ce script est volontairement simple pour répondre à la plupart des cas possibles. Il est possible d'y ajouter de nombreuses fonctionnalités telles que la suppression dynamique du cache si un produit a été modifié ou la possibilité pour le développeur d'ajouter un paramètre à l'url pour ne pas utiliser les données du cache.

Continuez votre lecture...
BHB
BHB

samedi 09 octobre 2010 à 19h14 Merci, ca marche mais j'ai des doute sur ca réèle efficacité.
Bizarre les commentaires

mardi 19 octobre 2010 à 14h08 Désolé pour les commentaires, c'est du spam qui est passé à travers les mailles de mon antispam pendant mon absence...

L'efficacité du système de cache dépend de plein de facteurs, si vous avez un serveur puissant et peu de visiteurs sur une page peu dynamique, dans ce cas ce ne sera pas très efficace... Le mieux est de tester, faire un benchmark et comparer les résultats.

jeudi 28 avril 2011 à 13h14 Vraiment, ce script clair et simple est génial, merci beaucoup

GEGE
GEGE

mardi 12 février 2013 à 14h37 Bonjour,
Très bien mais pour un Novice où doit-on mettre ce script ?
Dans la page index.php ou dans .htaccess ?
Merci

mercredi 20 février 2013 à 11h08 Le script doit être inséré dans la page qui gère le contenu que vous affichez à l'internaute. Dans la majorité des cas, c'est bien le fichier index.php qui est utilisé.
Ce script étant en PHP, il n'est pas conçu pour être utilisé dans un fichier .htaccess.

mercredi 11 juin 2014 à 18h36 Pas très pratique de cacher des pages entières sachant qu'aujourd'hui presque tous les sites utilisent des éléments dynamiques. Le plus efficace est de s'attaquer au goulet d'étranglement de la base de données => cacher les résultats de requêtes pour ne pas avoir à se servir de la base de données.
Ex:
http://www.tuto-developpement.fr/2014/06/optimiser-site-cache-facile-requetes-sql-en-php-12/

Ajoutez un commentaire :
Anti spam