En tant que visiteur, si on voit une extension html ou htm on se dit naïvement que la page est une page statique. C'est vrai dans la très grande majorité des cas. Les seuls cas où la page est générée dynamiquement sont les configurations qui interprètent les fichiers html comme des scripts php (par exemple). Ce n'est pas forcément une bonne idée mais ça permet de cacher le type de langage de script utilisé pour générer les pages. Une page avec une extension html peut donc dans le cas le plus simple est une page écrite avec votre éditeur préféré et déposée dans votre espace web.
La deuxième solution qui vient à l'esprit est la réécriture d'url. On redirige par exemple une url du type /2006/05/01/93-cache-moi-cette-page.html vers le script index.php en lui passant en paramètres ?date=2006/05/01&billet=93&titre=cache-moi-cette-page. Ce script se charge en plus de vérifier que la page doit être resservie au client qui en fait la demande en se basant sur sa date de modification. On peut encore améliorer les performances en enregistrant le contenu généré dans un fichier que l'on récupère directement plutôt que de reconstruire la page à chaque fois.
Une autre solution presque équivalente est de se baser sur l'erreur 404 (fichier non trouvé). Le serveur http redirige la page (/2006/05/01/93-cache-moi-cette-page.html) demandée par le client vers le même script index.php. Au premier appel la page n'existe pas. Le script génère un cache comme pour la méthode précédente mais plutôt que d'utliser un répertoire de cache il fabrique la page directement au bon endroit. Au prochain appel de la page, le serveur envoie directement la page html sans faire appel à php. Le gain en performance est énorme. C'est la méthode employée par le site linuxfr.
Une solution encore similaire est le multiviews d'apache.
Je ne prétends aucunement qu'il n'y a pas d'autres méthodes mais en voici tout de même une dernière. Imaginons une page complexe et longue à générer avec par exemple des flux d'informations (photos, dépêches, vidéos, ...) au format XML. Parser le xml à chaque requête sur cette page serait très couteux surtout si le site a une forte audience. On a donc l'idée de cacher cette page. L'idée est un peu la même que pour la redirection de l'erreur 404, on va générer le html là où le serveur est sensé le trouver. Mais plutôt que de générer cette page à la première requête on va la générer lorsque l'un des éléments de la page a changé. Un script surveille le disque via fam par exemple à l'endroit où sont sensées arriver les données et fait appel au script (perl par exemple) qui fabrique la page. Si les données changent le script est de nouveau appelé et la page html est mise à jour. Le serveur http ne fait que livrer des pages html.
1 De Palleas -
Ah donc en fait j'avais bon dans l'esprit, la page est bien mise à jour lors d'une modification... par contre j'ai 2 questions :$ (qui a dit que j'étais chiant ? :s)
->Tout d'abord j'ai pas tout compris dans ce petit paragraphe :
"Une autre solution presque équivalente est de se baser sur l'erreur 404 (fichier non trouvé). Le serveur http redirige la page (/2006/05/01/93-cache-moi-cette-page.html) demandée par le client vers le même script index.php. Au premier appel la page n'existe pas. Le script génère un cache comme pour la méthode précédente mais plutôt que d'utliser un répertoire de cache il fabrique la page directement au bon endroit. Au prochain appel de la page, le serveur envoie directement la page html sans faire appel à php. Le gain en performance est énorme. C'est la méthode employée par le site linuxfr."
En gros, si tu mets un lien vers /page_qui_nexiste_pas/98/01/05/06, avec un .htaccess, tu lui mets en page d'erreur articles.php, qui va donc s'afficher et pouvoir utiliser les variables de l'url quand même ? J'ai pas l'impression d'avoir été clair mais c'est quelque chose comme ca non ?
Et la deuxieme c'est rapport à la méthode que tu utilises sur le site de l'AFP je suppose, tu mets à jour la page à chaque modification ca je veux bien mais ta page est comme ca :
<html>
<head>
<title>Vive l'AFP</title>
</head>
<body>
<!-- debut dernieres_videos -->
<!-- fin dernieres_videos -->
</body>
</html>
Comme pour un gabarit de template ? Enfin tu sépares ta page pour mettre à jour la bonne partie ou tu utilises une autre méthode (vu que c'est du PERL et que je ne connais pas c'est tout à fait possible quand j'y repense) (genre regenerer la page entierement) ?
2 De Nicolas -
Pour faire dans le vraiment concret. Imaginons que la page http://www.nikrou.net/2006/05/01/93-cache-moi-cette-page.html n'existe pas et que je me serve de la redirection basé sur l'erreur 404. Le serveur cherche un fichier 93-cache-moi-cette-page.html dans le répertoire sous l'arborescence /2006/05/01. Dans apache on peut rediriger l'erreur 404 sur un script: ErrorDocument 404 /mon_script.php. Mon script php va construire la page html en allant chercher les infos dans la base de données et fabriquer le fichier /2006/05/01/93-cache-moi-cette-page.html. La prochaine fois que quelqu'un veut voir l'article, apache va trouver le fichier et l'enverra directement sans faire appel au script php.
> Comme pour un gabarit de template ? Enfin tu sépares ta page pour mettre à jour la bonne partie ou tu utilises une autre méthode (vu que c'est du PERL et que je ne connais pas c'est tout à fait possible quand j'y repense) (genre regenerer la page entierement) ?
Oublie le fait que ce soit du perl; ça ne change rien. Mais en revanche tu as raison, j'utilise des templates. En fait j'ai des pages html avec des marqueurs personalisés.
3 De Palleas -
J'étais conscient qu'une page d'HTML pure (statique je veux dire) se chargeait plus rapidement qu'une page générée par php mais je n'avais pas percuté que la difference était aussi importante. Je vais essayer la méthode que tu utilises sur l'AFP, bon en php mais pour certains sites je pense que ca peut vraiment être interéssant. Par contre sur le systeme des erreurs 404, tu dis
"/2006/05/01. Dans apache on peut rediriger l'erreur 404 sur un script:
ErrorDocument 404 /mon_script.php. Mon script php va construire la page html en allant chercher les infos dans la base de données et fabriquer le fichier /2006/05/01/93-cache-moi-cette-page.html."
du coup la page sera fabriquée dans le dossier
2006
->05
-->01
pour la page 93-cache-moi-cette-page.html
c'est bien ca ? Dans tout les cas j'aime beaucoup cette méthode :)
Merci beaucoup M'sieur Nicolas ;)