Cache moi cette page!

Derrière ce titre pour le moins étrange se cache l'idée d'optimiser le temps de réponse des requêtes faites à un serveur http (apache par exemple). Il y a de nombreuses façon de faire et c'est ce que je vais tenter de résumé et d'expliquer.

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.

Haut de page