Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/06/2007, à 20:16

Bzh

Que pensez-vous de ma gestion de cache en php ?

Bonjour,

Voici deux fonctions me permettant de gérer un systeme de cache sur l'un de mes sites !

Le but est de construire un tableau contenant le time() et le contenu de la page puis de le sérializer et l'enregistrer dans un simple fichier.

Et ainsi donc, faire la même chose à l'envers afin d'afficher le contenu de la page html !


Voici ma fonction de lecture de la version de la page mise en cache

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Fonction de gestion du cache
function gestion_cache_lecture( $nomfichier ) {

	
	//Constante de durée en secondes
	$duree = 300;
	//On ouvre le fichier en lecture
	$nomfichier = './caches/' . $nomfichier ;
	if( ! $f = @fopen( $nomfichier, 'r'  ) ){ return false; }
	$cache = fread ($f, filesize ( $nomfichier ) );
	fclose( $f );
	//On déséralize
	$cache = unserialize( $cache );
	//On regarde la date
	if( $cache[0] > time() ){
		return $cache[1];
	}else{
		return false;
	}

}

Et voici ma fonction de mise en cache

function gestion_cache_ecriture( $nomfichier, $contenu) {

	//Constante de temps en secondes
	$duree = 300;
	//On sérialize
	$donnee = array( time() + $duree , $contenu );
	$donnee = serialize( $donnee );
	//On ouvre le fichier
	$nomfichier = './caches/' . $nomfichier ;
	$f = fopen( $nomfichier, 'w'  );
	fwrite($f, $donnee);
	fclose( $f );
	//On quitte la fonction
	return true;

}

Qu'en pensez vous ? Comment pourrais-je l'améliorer ?

Dernière modification par Bzh (Le 05/06/2007, à 20:17)

Hors ligne

#2 Le 06/06/2007, à 11:10

Bzh

Re : Que pensez-vous de ma gestion de cache en php ?

Beaucoup de lecture et peu de réaction !

Etaient-elles si nul que cela ? Je pensais qu'il y avait des pro de PHP sur le forum !

Please !

Hors ligne

#3 Le 06/06/2007, à 12:15

G-rom

Re : Que pensez-vous de ma gestion de cache en php ?

Bin jsuis pas un "pro" en php mais ça m'a l'air correct tout ça.

Après faut voir si t'as vraiment un avantage à tirer de tout ça. Est ce que la somme des fonctions que tu utilises ici te prend vraiment moins de ressource que la page à afficher en temps normal ?


Quand tu ne sais pas (cherche puis) demande, quand tu sais partage.

Hors ligne

#4 Le 06/06/2007, à 13:14

gene69

Re : Que pensez-vous de ma gestion de cache en php ?

je crois que l'usage est de mettre un fichier lock avant détruire ou réécrire un fichier, comme pour apt-get. j'avous que j'ai jamais trop investigé la question.

le manuel de php ne parle pas d'atomicité....


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#5 Le 06/06/2007, à 14:29

marc31

Re : Que pensez-vous de ma gestion de cache en php ?

heuu, un peu de conception objet, ca ne ferait tout de meme pas de mal non ?
- ce que tu veux mettre en cache c'est une page, non ?
- tu connais l'url de la page, tu peux en deduire le nom du fichier cache,
- si la page accepte des parametres, tu dois aussi le gerer au nivo du cache
- je vais faire une sorte de meta-langage de haut niveau sous forme de classe :

$page = new Page();
$page->get_content(); # genere le contenu de la page, via base de données
$page->display();

c'est a prioris la partie principale, mais cela cache plein de choses. Le get_content() doit faire plein de choses :
- si le cache est périmé
- requete SQL,
- formatage,
- enregistrement en cache

page->display() : recupere le contenu du cache ou ce qui est deja en memoire

- il va de soit que la classe Page doit hériter d'une classe mere du nom PageEnCache(). Il faut y definir toutes les methodes nécessaires.

concernant ton code,

- serialize, et unserialize sont tres tres couteux. A eviter sur de gros volumes de données. Pour quelques variables ca passe bien.

- un petit racourci : $data = unserialize(file_get_contents($file)); marche en une seule ligne et est certainement un peu plus rapide. Idem pour la serialisation.

- vaudrait mieux regarder la date du fichier (stat($file)) plutot que de lire et voir que finalament la date va pas bien :-) Tous les caches se basent sur l'age du fichier.


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#6 Le 06/06/2007, à 15:03

Bzh

Re : Que pensez-vous de ma gestion de cache en php ?

Oui !

Merci, en effet, regarder la date du fichier serait plus légé  et surtout m'éviterai d'utiliser sérialize.

Par contre, l'objet est plus lourd que la simple programmation par fonction ! Je n'ai jamais trouvé d'interet à programmer en object en php !

Hors ligne

#7 Le 06/06/2007, à 18:01

marc31

Re : Que pensez-vous de ma gestion de cache en php ?

Bzh a écrit :

Par contre, l'objet est plus lourd que la simple programmation par fonction ! Je n'ai jamais trouvé d'interet à programmer en object en php !

tu sais, c'est en forgeant qu'on devient forgeon, c'est pareil pour l'objet. Je ne donnerai pas de lecon de moral ayant moi aussi eu bien du mal a m'y mettre.


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#8 Le 06/06/2007, à 18:26

x@v

Re : Que pensez-vous de ma gestion de cache en php ?

et bien l'utilité, demande au ssii qui embauche. Auquel cas ne t'y frotte pas, c'est une norme admise.
PS: moi je suis comme toi sa me soul de changer mes habitudes de travail et de passer à l'objet.


[-- qwerty user --]

Hors ligne

#9 Le 06/06/2007, à 19:00

marc31

Re : Que pensez-vous de ma gestion de cache en php ?

x@v a écrit :

PS: moi je suis comme toi sa me soul de changer mes habitudes de travail et de passer à l'objet.

rien de nous empêche de commencer a faire des applications partiellement en objet, puis le temps venant de faire du full object.


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#10 Le 06/06/2007, à 19:40

Bzh

Re : Que pensez-vous de ma gestion de cache en php ?

Oui, mais si l'on regarde des bentch ! Le full object, comme tu dis, demande plus de ressource que l'utilisation de simples fonctions ! Je vais vous donner l'article !

Dernière modification par Bzh (Le 07/06/2007, à 00:18)

Hors ligne

#11 Le 06/06/2007, à 21:13

x@v

Re : Que pensez-vous de ma gestion de cache en php ?

Le full abject, pas tant que ça, j'ai pris un livre pour construire une appli e-commerce, franchement j'ai apris beaucoups de choses et le potentiel est énorme.
Reste que j'ai du mal à m'y mettre, mais il faut faire la part des choses. Tu sais que beaucoups de pointures développent des classes... Sa ma intrigué et j'ai finis par m'y coller. C'est juste une conception differente, pour la compréhension je ne m'inquiète pas pour toi, les doigts dans le nez.


[-- qwerty user --]

Hors ligne

#12 Le 07/06/2007, à 00:18

Bzh

Re : Que pensez-vous de ma gestion de cache en php ?

Ah !...:/

Hors ligne

#13 Le 07/06/2007, à 07:39

marc31

Re : Que pensez-vous de ma gestion de cache en php ?

Bzh a écrit :

Oui, mais si l'on regarde des bentch ! Le full object, comme tu dis, demande plus de ressource que l'utilisation de simples fonctions ! Je vais vous donner l'article !

oui, c'est possible que parfois, quand :
- l'interface qu'on appelle aussi API rend les choses trop simple, on oublie certaines choses, voir on fasse plusieurs fois la meme chose parce que les objets naissent et meurent.
- mais en meme temps, il est très facile en objet de gerer des caches parce que traitement et données sont au même endroit. Il suffit souvent de positionner un flag et hop, on evite de refaire l'acces au disque ou à la base de données.

Je n'ai jamais vraiment eu de soucis de perfo avec mes appli php en objet. La seule fois était lorsque je devais lire une carte, en fait une matrice 1024x1024. Php par la facon dont il gere ses données ne supporte pas bien un tableau de cette taille. j'ai optimisé et ca passe sans probleme.

J'ai aussi réalisé un editeur vectoriel en php-gtk. Les temps de réponse sont tout a fait correctes. Pourtant, la encore il y a des classes a n'en plus finir.

Les applications gourmandes en objet sont souvent celle ecrites en C++ avec des templates ; il faut aussi quelques erreurs de conception.


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne