begin process at 2010 03 22 16:44:23
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Tutoriaux

 > COMMENT FAIRE UN SYSTEME DE CACHE

COMMENT FAIRE UN SYSTEME DE CACHE


 Information sur le tutoriel

Note :
5,25 / 10 - par 4 personnes
5,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10


 Description

Il y a plusieurs type de caches. D'abord les utiles et les innutiles ... (ok je sort :p)

Plus sérieusement, il y a des caches sur des fichers généré dynamiquement et des caches sur, par exemple, des requetes sql.
Quoi, c'est pas la même chose pour tout? ... Et ben non !
Et ce tutorial donne quelques explicatifs sur le comment du pourquoi.
Mais, je vais pas vous donner le code tout fait, juste l'idée :D

Tutorial

Tout d'abord, regardons comment fonctionne un systeme de cache sur des fichiers.
On peux choisir d'utiliser un cache pour :
  • Des fichiers créé dynamiquements mais qui ne change pas souvents.
  • Des thumbernails créé a partire de php
  • Image dynamique
Pour ces fichiers, on va ce baser sur la date de dernière modification.Le principe est de donner une date limite pour une régérérationautomatique du cache, ou un cas spécial pour les thumbernails, onengregistre le md5 du fichier source.

Code :

<?php
// Pour un fichier normal
   define('CACHE_TIME',900); // en secondes

   
if(($time = filemtime($cached_file)) && ((time() - $time) < CACHE_TIME))
   
{
      
readfile($cached_file); // Si le temps limite est pas dépassé, alors on lis le ficher
    }
    else
    {
     
update_cache($cached_file.'.ext'); // Fonction qui va écrire dans le fichier cache.
    }
?>
---
<?php
// Pour un thumbernail
    $cached_md5_file = substr($md5_file,0,strpos('.ext')); // Format: [chaine_md5].ext où ext est une extention quelqu'onque
    if( $md5 = md5(filemtime($cache_file)) != $cached_md5_file)
    {
          
update_cache($md5.'.ext'); // Fonction qui va écrire dans le fichier cache.
    }
?>


Ce code est donc fait pour prendre ce qui a été générer. Mais vous allez dire : "D'accord, mais comment on met le cache a jour?"
Tout simple, il suffit de relancer le processus de création initial ;-)
Il est bien évidemment possible de merger les deux systeme. Mais avecle md5 c'est, si le fichier initial est modifier, alors le fichierdépendant doit être mis a jour.
Avec le systeme de temps, c'est mettre a jour tout les X secondes.

Tout ceci est fort basique, mais il est possible d'élaborer pour crééun cache de requetes sql (avec le systeme de temps). On enregistre lesrésultats des requetes en format php dans le fichier cache, et oninclus le fichier cache pour avoir le résultat des requetes...
Mais il faut faire attention avec ceci, si une erreur s'insère (unenregistrement qui revient plusieurs fois alors qu'il n'existe qu'unefois, par exemple) alors tout risque de partire vinaigre et faireplanter un thread du serveur (Si si, expérience personnel :-D). Et jevous avoue que c'est asser frustrant...

J'espère que ce tuto va vous donner des idées, histoire que je n'aie pas fait ca pour rien ;)

Xro

Commentaires

Commentaire de piranhaworld le 04/07/2005 23:49:53

tres complexe ton truc (sans vouloir te vexer) je comprend pas vraiment ou tu veut en venir..
elle est definie ou update_cache()??

Commentaire de Jayadeva le 05/07/2005 00:39:18

Null part en fait, update_cache est a coder sois-même.

C'est le procéder qui te permet de créé tes thumbernails, par exemple, ou écrire dans un fichier.
Ca n'a rien a voir avec une base, carre cette fonction est différente pour ce que l'on cherche a faire...

J'ai donc pris un nom pour représenter l'action ^^
Bon, ok, j'ai pas l'âme d'un prof. Mais j'ai compris l'histoire et j'ai essayer de faire passer l'idée :)

Commentaire de Jayadeva le 05/07/2005 00:56:17

J'ai parler chinois aussi -_-

Bon, update_cache c'est ce qui va te permetre de mettre ton cache a jour. Un cache est basé sur le travail que ferai ton script sans. C'est a dire, si tu crée une thumbernail tu fait la crée qu'une fois, cependant le fichier original pourait changer. Dans ce cas tu doit vérifier si la date de dernière modification du fichier est plus proche que celle qui était enregistrée avec le thumbernail (la chaine md5 dans son nom).

Ensuite, pour un cache sur des requetes, il suffit de faire en sorte d'écrire dans un fichier le résultat de ces requetes. Tu te débrouille comme tu veux du temps que tu arrive a un résultat :)

Si j'ai encore zipé un truc, n'hésitez pas a me le dire ^^

Commentaire de piranhaworld le 06/07/2005 00:52:31

une dernier question... t'as mis $time = filemtime($cached_file)) && ((time() - $time) < CACHE_TIME))
c'est plutot "OU" à la place de "ET"???

Commentaire de Arnauti le 06/07/2005 11:01:43

Salut, on fait comment pour update_cache ? j'aimerais bien utiliser ce code, mais sans cette "fonction" je peux pas ....

Si tu sais comment faire, dis-le!

A++

Commentaire de Jayadeva le 06/07/2005 12:08:31

C'est bien && car $time = derniere modif ET (time() - $time) > CACHE_TIME


Pour update_cache, je l'ai expliquer. Si tu n'utilise pas de cache, tu a tes fonctions de création de -quelque chose- qui font le travail constament. Il suffit juste de les adapter pour qu'elles ne fonctionnent qu'avec le cache, et a chaque demande...
update_cache représente le travail que fait ton script sans cache ...

Bon, j'étais asser crever, je venais de passer nuit blanche quand j'ai écrit ca ^^

Commentaire de psykocrash le 06/07/2005 13:30:46

Salut,
Moi je suis en train de développer un cms et le système de cache est primordial pour les sites Web à fort traffic. Le problème c'est que tout est stoqué dans ma base de données, en plus y'a un seul fichier par lequel tout passe (il inclu les autres ficheirs requis)donc je ne peux pas faire un système de cache qui vérifit la date du fichier car c'est toujours lui (index.php) qui est appellé. Si tu as une solution je suis preneur :)
merci

Commentaire de Jayadeva le 11/07/2005 15:04:15

Pour les requetes obligatoires, tu peux pas avoir de cache. Mais pour les requetes sur des données qui ne change pas souvents (donnée de configuration par exemple) tu peux stocké ca dans un cache. Comme metre le cache a jour? A chaque fois que les données de la base change, c-a-d que tu met a jour le cache quand tu change de configuration ;)

C'est un peu le même principe pour le reste ...

Commentaire de psykocrash le 11/07/2005 15:13:36

Le système de cache serait plutôt utile pour les articles, news, pour le forum, etc.
Mais j'ai trouvé la solution pour les requêtes obligatoires (système que je n'implémenterais pourtant pas pour la 1ere version du cms). En fait, je vais tout simplement mettre a jour le cache à chaque fois que quelqu'un postera un message, un article, etc. Donc quand un visiteur demandera la page, il aura directement le cache qui sera forcément à jour ;)

Commentaire de Jayadeva le 11/07/2005 15:34:30

Oui, mais si tu a 40 post par jour? 40 fois le cache mis a jour? Ca va demander beaucoup plus de ressource qu'une demande directe des donnée au serveur sql, non?

Commentaire de psykocrash le 11/07/2005 15:42:05

Oui c'est vrai, mais alors comment faire ? J'aimerais bien trouver un système de cache valable :S

Commentaire de Jayadeva le 11/07/2005 16:27:45

La mise en cache des données statique est déjà bien, pour le reste le navigateur joue aussi un grand rôle. Si tu compare le cache de IE avec Firefox... IE c'est de la merde :D

arrete de te prendre la tête, tu ajoutera un cache si nécessaire. Lance une version de teste de ton CMS et attend les retour des utilisateurs. C'est un des meilleurs moyen de savoir ce qu'il manque ;)

Commentaire de aKheNathOn le 18/08/2005 11:50:32

ton tutoriel est vraiment décevant, tu n'explique rien de concret. Rien est utilisable à par l'esquisse d'une explication.

Je vous conseille pour ceux qui souhaitent faire un systéme de cache de rechercher des codes utilisant la fonction ob_start et ob_end_flush.

Je suis entrain de faire un systéme de cache intégrable dans n'importe quel systéme, une fois finit je le partagerais avec vous.

En attendant, je trouve dommage que tout ceci reste inexploitable. Au passage, un systéme de cache à pour but de soulager les ressources processeur dans un premier temps, ainsi que les requettages SQL. Le cache coté server ne va pas réduire les communication Client/Server mais va les accélérer.

Sur ce bonne prog à tous, akh

Commentaire de aKheNathOn le 18/08/2005 16:50:50

Tuto sur le cache + code source commentés + fonctions exploitables
http://www.phpcs.com/code.aspx?ID=33299

Commentaire de xhark le 19/08/2005 01:20:15

J'ai réalisé un système de cache en php, il est dispo à http://xcache.c.la pour ceux qui veulent tester et me dire ce qu'ils ont pensent?

++

 Ajouter un commentaire




Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,062 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales