un site en PHP/MySQL avec seulement des pages HTML en cache !?!? - PHP - Programmation
Marsh Posté le 27-11-2003 à 22:17:23
c'est probable des scripts CRON (en simple des batches de DOS disons mais version *NIX) éxécutés à tous les 10 mins (exemple) directement roulé sur la platte forme comme tel...un script vérifie si il y a tel enregistrement à telle place dans la BD, si oui, il modifie "la_page.html"...
Je fais peut-être aucun sens...
Marsh Posté le 27-11-2003 à 22:24:12
plutôt un query cache au niveau du serveur SGBD, ça améliore pas mal les performances
quand au fait de voir html comme extension, ben ça empêche pas d'avoir du php dedans et de demander au serveur de l'interpréter comme du php (pour pas qu'on sache qu'il y a du php derrière, tu vois le truc?)
Marsh Posté le 27-11-2003 à 22:28:43
moi ma réponse était plus claire...
Marsh Posté le 27-11-2003 à 22:39:35
c'est pas question d'être clair, c'est que ma réponse est la plus simple à mettre en oeuvre, beaucoup plus simple
Marsh Posté le 27-11-2003 à 22:44:05
je sais bien qu'avec les iframe on peut mettre du php dans une page .html, mais quel intérêt ...
ce que je voudrais c'est tout comme PCI ou Clubic, faire vraiment un site entièrement basé sur du dynamique en faisant le moins de requêtes et d'exécutions de scripts possibles pour limiter l'utilisation de ressources !
Marsh Posté le 27-11-2003 à 22:48:53
non t'as pas compris
disons que t'as écrit un script php et tu le sauves avec l'extension html au lieu de php. Dans la config d'apache, tu lui dis que tu veux voir les pages html traitées par php, voilà.
ça correspond à ceci dans httpd.conf
Code :
|
Marsh Posté le 27-11-2003 à 22:56:56
mais quel intérêt ? car à ce moment là les requêtes mysql sont exécutées à chaque fois ... ce que je cherche c'est à n'avoir à exécuter les requêtes SQL et PHP que lorsqu'il y a modif, le reste du temps, c'est une page HTML mise en cache avec les dernières infos qui est affichée ...
Marsh Posté le 27-11-2003 à 23:21:19
bon, je mets le drapeau ici pour expliquer demain si personne n'a donné la bonne réponse entre temps...
Marsh Posté le 27-11-2003 à 23:23:40
Le system de cache de Spip -- [http://www.spip.net/fr] -- est très intéressant à analyser. Les sources php montrent notammment comment fonctionnent:
- la "mise en délai" du recalcul des pages
- la table de hashage qui stocke les html
Cet exemple devrait t'apporter des idées.
Marsh Posté le 28-11-2003 à 09:01:56
moon06 a écrit : mais quel intérêt ? car à ce moment là les requêtes mysql sont exécutées à chaque fois ... ce que je cherche c'est à n'avoir à exécuter les requêtes SQL et PHP que lorsqu'il y a modif, le reste du temps, c'est une page HTML mise en cache avec les dernières infos qui est affichée ... |
l'intérêt c'est que grâce au query cache de MySQL, la requête n'est pas vraiment exécutée. Comme 90% du temps de génération d'une page est passé dans une requête SQL, j'y vois tout de suite mon intérêt.
Marsh Posté le 28-11-2003 à 09:52:50
sur hardware.fr (le site, pas le forum ), y a ça dans le haut des pages :
Code :
|
Je suppose que c'est le signe qu'ils ne génèrent pas les pages à chaque demande ?
Sur telecharger.com ils utilisent le même genre de trucs : des pages HTML sont générés la nuit (j'ai lu ça quelque part sur leur forum)
Marsh Posté le 28-11-2003 à 10:02:17
Je suppose quand même qu'il y a des formulaires pour ajouter/modifier des trucs sur le site.
Il suffit de déterminer quelles sont les pages affectées par l'opération et de les regénérer quand on soumet le formulaire.
Marsh Posté le 28-11-2003 à 10:06:43
Freekill a écrit : Je suppose quand même qu'il y a des formulaires pour ajouter/modifier des trucs sur le site. |
Tout simplement oui !
Dans ton interface d'administration, quand tu valide une modif, tu l'enregistre en base, et tu regénère la page HTML.
Pas besoin de le faire toutes les 5 minutes avec un cron
Marsh Posté le 28-11-2003 à 16:02:04
Un petit article sur zend.com (qui au passage en contient plein d'autres très intéressants) : http://www.zend.com/zend/art/scriptcaching.php
Marsh Posté le 28-11-2003 à 22:25:20
Mara's dad a écrit : |
ok, mais comment ? c'est ça en fait ma question dès le départ ... comment mettre à jour le cache d'une page depuis l'admin ...
Marsh Posté le 28-11-2003 à 22:29:35
Je pense qu'il suffit de regénérer chaque page lorsqu'elle est modifiée
Par exemple, quand tu postes un message, ca regénère la page du topic correspondant. Du coup, tous les accès en lecture se font sur des pages "statiques"
Marsh Posté le 28-11-2003 à 22:41:26
bah oui, tout simplement. Tu gardes un moyen simple de faire la transcription DB<->url du fichier. Comme ça, tu détruit l'ancien et tu le remplaces par le nouveau.
Il ne faut pas toujours chercher midi à quatorze heure.
Marsh Posté le 29-11-2003 à 11:56:03
ca vous est jamais venu a l'idée qu'au moment de poster la news, la page html etait généré ?
vous savez, avec php on peut créé des fichiers avec fopen(), fwrite() etc.
Pour telecharger.com un jour l'admin avait dis qu'il generais les pages html sur son ordi de bureau a l'aide d'un script perl et qu'il uploadait le tout.
voila
Marsh Posté le 29-11-2003 à 17:47:43
yep, je connais tout ça, je me demandais juste s'il y avait un autre moyen que de réécrire entièrement les pages à chaque fois ...
Marsh Posté le 29-11-2003 à 17:55:43
moon06 a écrit : yep, je connais tout ça, je me demandais juste s'il y avait un autre moyen que de réécrire entièrement les pages à chaque fois ... |
est tu au courant que php réécrit entierement la page a chaque fois que tu la charge?
Marsh Posté le 29-11-2003 à 23:15:16
bon, c'est pas grave, j'arrive pas a dire exactement ce que je voudrais lol !
je vais tester une idée ...
Marsh Posté le 29-11-2003 à 23:18:27
moon06 a écrit : bon, c'est pas grave, j'arrive pas a dire exactement ce que je voudrais lol ! |
T'es pas le seul : http://forum.hardware.fr/forum2.ph [...] 932&cat=10
Marsh Posté le 30-11-2003 à 14:08:40
mrBebert a écrit : Je pense qu'il suffit de regénérer chaque page lorsqu'elle est modifiée |
A la rigueur, il y a une autre approche qui est possible
Regénérer une page statique à chaque modification est adapté pour des pages qui sont plus souvent lues que modifiées (catalogue ...).
Dans le cas contraire, on peut aussi se contenter de supprimer la page statique à chaque modification. Et lors d'une lecture, on génère la page si elle n'existe pas, avant de la renvoyer.
Je pense que c'est mieux que de générer des pages qui seront
invalidées avant d'être consultées
(bon, c'est vrai que dans ce cas, on peut aussi se contenter de pages dynamiques )
Marsh Posté le 30-11-2003 à 14:14:46
ReplyMarsh Posté le 30-11-2003 à 14:14:56
Oublie pas que tu peux gérer aussi le comportement du cache client avec les en-têtes http appropriés.
Marsh Posté le 29-12-2003 à 23:55:04
topic cool : FLAG !!!!
sinon j'utilise pour certains petits sites la solution de jpcache qui est très simple à configurer
Marsh Posté le 02-01-2004 à 03:59:39
KrisCool a écrit : Un petit article sur zend.com (qui au passage en contient plein d'autres très intéressants) : http://www.zend.com/zend/art/scriptcaching.php |
terrible ce petit script.
J'en ai profité pour rajouter la gestion du temps. Un peu à la barbare certes mais cela règle pas mal de questions que vous vous posiez Pour que cela marche la différence pra rapport à l'original est qu'il faut appeler un fichier .php en non plus un .html ou bien que Apache interprète les .html comme contenant du PHP.
Code :
|
Marsh Posté le 28-01-2004 à 15:18:07
Salut,
Je tiens à te signaler que flock est inéfficace si tu n'utilises pas fflush pour vider le buffer juste après fwrite. J'ai fait des tests et le fait d'oublier fflush créé des collisions si 2 scripts accèdent au même fichier en même temps.
Je profite de ton post pour demander si des gens ont des renseignements à propos de cette remarque dans la doc :
Citation : flock() ne fonctionne pas sur NFS ou sur les autres systèmes de fichiers réseaux. Vérifiez la documentation de votre système d'exploitation pour plus de détails. |
est-ce toujours d'actualité ? (par exemple sous Windows 2000 en FAT32 il n'y a pas de soucis)
Ces configurations sont-elles fréquentes chez les hébergeurs ?
Merci d'avance
Marsh Posté le 28-01-2004 à 23:49:56
Voila j'ai fait une petite fonction qui tourne bien, essayez la :
Code :
|
et dans les fichiers php au lieu des requetes classiques tu passes a la fonction cache le fichier texte ou tu dois ecrire et ta requete :
Code :
|
J'espere que ça vous servira ...
Marsh Posté le 29-01-2004 à 08:13:27
Tentacle > j'ai juste changé 5 lignes dans le script de Zend mais je suppose que tu as raison POur ta question je ne sais pas
seb-belfort > cool, j'essaie ça dans la semaine !
Marsh Posté le 29-01-2004 à 12:02:45
Tentacle a écrit : Peut-être que ce n'est pas nécéssaire ici remarque ... |
en fait le code suivant
Code :
|
permet justement de prendre puis de laisser la main sur le fichier, donc a priori pas de collisions, si c'est bien ça que tu te demandais
Marsh Posté le 29-01-2004 à 12:24:15
Oui, il n'y aura pas de collision entre ces 2 appels de flock. Le problème est que PHP utilises un buffer quand tu écris dans un fichier et donc ce qui est envoyé par un fwrite par exemple n'est pas écrit immédiatement. Autre problème, tu ne peux dévérouiller un fichier que quand il est ouvert, donc entre le moment où tu le dévérouilles et celui où tu vas fermer ce fichier (et donc le moment où PHP va écrire dans le fichier ce qui est resté dans le buffer), un autre script peut vérouiller le fichier et y écrire.
Ce qui chez moi a entraîné des collisions (certes moins que sans flock mais tout de même). J'ai résolu le problème en utilisant fflush avant de dévérouiller le fichier.
Donc sauf à préciser quelquepart que PHP ne doit pas bufferisé les sorties, je pense que fflush est nécéssaire à l'efficacité de flock
Marsh Posté le 27-11-2003 à 22:12:10
voila, en fait, j'ai un site entièrement PHP/MySQL avec des mises à jour très fréquentes sur toutes les pages dues à des changements de nombre de news, commentaires, titres, etc ...
j'aimerais savoir quel est le moyen le plus efficace pour utiliser directement des pages HTML tout comme le font Clubic, PC Inpact ... et donc limiter les requêtes PHP/MySQL inutiles.
je sais qu'il faut utiliser un système de cache, mais comment exactement ? comment est-ce que les pages vont se mettre à jour automatiquement ?
merci d'avance !
---------------
- Si les cons volaient, il ferait nuit tout le temps ! -