Tout JavaScript.com - Scripts, Tutoriaux, Forums pour webmasters et développeurs
Retour à l'accueil
Rechercher :    

Les indispensables
Magic Menu
Les meilleurs scripts
Les forums
Les tutoriaux
La référence JavaScript
Les actus du net
Les petites annonces

Shopping
Mon livre : Guide complet Javascript - Nouvelle édition
Hébergement web

Compteur de visites
CountUs.fr - Combien de visiteurs actuellement sur votre site ? Avec CountUs, vous le saurez !

Les javascripts
Les plus vus
Les mieux notés
La boutique

Les tutoriaux
Introduction javascript
La structure javascript
Les limites de javascript
Les popups
Les formulaires
Le DHTML
Les cookies
Les frames
Les maths
Les chaînes de caractères
Les expressions régulières
Débugger un script
AJAX / XMLHTTPRequest
Introduction au PHP
Javascript et PHP
Traiter les données PHP
Intro base de données
Optimiser ses développements
Tous les tutoriaux

Les services
Les questions fréquentes
Les forums | Le chat
L'annuaire de sites
Le livre d'or
Contacts
A propos du site
La newsletter
 Inscription à la newsletter
HTML - Texte

Les partenaires
Beauté-test
Mémoclic
Glandouille.com
Nord vs Sud
Révélateur.com
ActuLab
Foorby, favoris en ligne
Une place pour toi
Cadeau gratuit
Config Mac
Pifex











 

Nous avons vu comment mesurer les performances d'un script et comment améliorer les performances des requêtes SQL. Continuons notre tour des méthodes pour encore améliorer les performances de votre site.

Le principe général d'une optimisation est d'améliorer le rendement d'un traitement. Certains traitements restent malgré toutes les optimisations imaginables assez longs. La solution d'optimisation est alors de stocker le résultat du traitement et de le retrouver en cas de besoin au lieu de refaire le traitement complet.
Cette stratégie a été adoptée par MySQL avec la gestion du cache. Il est également possible de faire la même chose avec des traitements PHP. Malheureusement, il n'existe pas de solution intégrée pour gérer le cache. Nous allons utiliser une des nombreuses solutions développées par la communauté PHP.

Le choix de Cache_Lite
J'ai choisi après pas mal de recherches et de tests la solution de Fabien Marty, Cache_Lite. Cette solution a l'immense avantage d'être orientée optimisation et facilité d'utilisation, tout en permettant une gestion fine du cache et des paramètres. Après plus d'un an d'utilisation sur mes sites, j'en suis toujours aussi satisfait : ca tourne tout seul !
Vous pouvez télécharger la dernière version de Cache_Lite sur cette page.
La documentation d'installation de Fabien est suffisamment claire et précise (et en français). Je ne vais pas ici la reprendre. Je préfère montrer l'intérêt d'une telle solution par quelques exemples d'utilisations.
Même si Cache_Lite est prévue pour fonctionner avec PEAR, il est très facile de l'intégrer dans un site qui n'utilise pas les modules PEAR, en modifiant simplement l'appel à la méthode raiseError() qui est déclenchée très rarement en cas d'erreur dans le traitement.

Pour vous convaincre
Voici quelques exemples d'utilisation pour vous convaincre de la facilité d'utilisation !

Les dernières participations des membres
Voici le script permettant de mettre en cache les dernières participations des membres.
  include "Lite.php";
  $Options_lite=Array("lifeTime"=>3600,"caching"=>true,"cacheDir"=>"/temp/");
  $Cache_Lite=new Cache_Lite($Options_lite);
  if ($data = $Cache_Lite->get("dernieres","participations")) {
    print($data);
  } else { // Le cache n'existe pas
    $contenu="";
    $query="SELECT * FROM participation ORDER BY dt DESC LIMIT 5";
    $rst=mysql_query($query);
    while ($participation=mysql_fetch_object($rst)) {
      $contenu.=participation->titre."<br>";
    }
    $Cache_Lite->save($contenu);
    print($contenu);
  }

Dans ce code, on commence par inclure le fichier des fonctions de cache_lite.
On crée un objet $Cache_Lite avec les paramètres contenu dans le table $Options_lite. En particulier, on note la durée de vie fixée à 3600 secondes et le répertoire permettant de stocker les fichiers de cache /temp/.
Ensuite, on essaye de récupérer le cache dernieres de la catégorie participations.
Si le fichier existe, on le renvoie avec print(), sinon, on effectue le traitement et on enregistre le résultat dans le cache avec la méthode save().
Ainsi, au prochain appel (s'il a lieu avant 3600 secondes), le cache sera retrouvé et retourné sans refaire le traitement.

Toutes les participations des membres
De la même manière, on peut enregistrer dans le cache toutes les participations des membres.
  include "Lite.php";
  $Options_lite=Array("lifeTime"=>3600,"caching"=>true,"cacheDir"=>"/temp/");
  $Cache_Lite=new Cache_Lite($Options_lite);
  if ($data = $Cache_Lite->get("toutes","participations")) {
    print($data);
  } else { // Le cache n'existe pas
    $contenu="";
    $query="SELECT * FROM participation ORDER BY dt DESC";
    $rst=mysql_query($query);
    while ($participation=mysql_fetch_object($rst)) {
      $contenu.=participation->titre."<br>";
    }
    $Cache_Lite->save($contenu);
    print($contenu);
  }


L'identifiant du cache est maintenant toutes toujours dans la catégorie participations.
Dans une même page, on peut créer autant de morceaux de pages à enregistrer en cache, avec simplement quelques lignes de code.

Manipuler le cache
Contrairement au cache SQL géré complètement par le moteur, vous devez vous assurer vous-même de la validité des données contenu dans les fichiers du cache.
Par exemple, en cas d'ajout d'une participation par un membre, il faut penser à supprimer tous les caches utilisant les participations. C'est relativement facile si vous avez bien nommé vos fichiers en utilisant des catégories cohérentes.
Pour supprimer tous les fichiers de cache de la catégorie de participations :   include "Lite.php";
  $Options_lite=Array("cacheDir"=>"/temp/");
  $Cache_Lite=new Cache_Lite($Options_lite);
  $Cache_Lite->clean("participations");

Il faut créer un objet $Options_lite avec en paramètre le répertoire des fichiers de cache. Ensuite, appelez la méthode clean() avec en paramètre le nom de la catégorie.
L'appel de clean() sans paramètre efface tous les fichiers de cache du répertoire.

Pour effacer un fichier particulier, utilisez la méthode remove()
  include "Lite.php";
  $Options_lite=Array("cacheDir"=>"/temp/");
  $Cache_Lite=new Cache_Lite($Options_lite);
  $Cache_Lite->remove("toutes", "participations");


Le cache par fichiers est redoutable d'efficacité : la récupération du cache prend à peine quelques millisecondes et permet d'économiser des traitements redondants.
Naturellement l'utilisation du cache est d'autant plus intéressante que le temps de traitement est long. Mais c'est souvent le cas. Je pense par exemple à l'affichage de menus, de compteurs, de liste de contributions (derniers topics d'un forums, dernieres actus, derniers commentaires...) ou encore de pages lourdes comme des synthèses statistiques.

Dernière partie : Optimisation serveur


| © Tout JavaScript.com 1999-2005 | Scripts | Tutoriaux | Forums | Référence | Magic Menu V2 | Mailociraptor | Petites annonces informatiques |


Edité par DevTribu sarl  Google
Serveur dédié : Page générée en 2 msec
18/05/2008 01:58:09 - OB = off