Créer et rafraîchir une page d'accueil statique

En cas de très gros trafic sur votre site (journal de 20h, slashdotting, etc...), il n'existe qu'une seule solution réellement efficace : comme 90% des visiteurs vont se rendre compte au premier coup d'oeil que le site web ne les intéresse pas, et que seuls 10% ou moins vont vraiment le visiter, il faut consacrer le maximum de ressources à ces 10% de visiteurs, et le minimum aux 90% de "touristes".

 

Pour cela, il suffit de générer une page statique en HTML, appelée index.html, qui aura la priorité sur l'index.php. Cette page sera délivrée 10 à 1000 fois plus économiquement que la page dynamique en PHP. Comme cela concerne 90% des visites, vous devriez diviser la charge du serveur par 10 au moins !

 

Seul inconvénient : les informations de session ne seront pas disponibles sur la page d'accueil, par exemple un client de retour chez vous avec un panier en cours ne verra pas son article dans le panier, il lui faudra cliquer sur le panier pour y avoir accès. Mais entre ce petit inconvénient et un site web indisponible...

 

Le mieux est évidemment de prévoir cette page "semi-statique" en amont et non en catastrophe le jour J, et vous pouvez même la conserver en permanence, suivant votre site ça pourra faire gagner plusieurs secondes au premier affichage de votre site, ce qui n'est pas négligeable.

 

L'astuce est d'automatiser périodiquement (toutes les 20 minutes, toutes les heures) le téléchargement de votre page index.php avec wget, d'en faire une page indextemp.html, puis après vérification que celle-ci est correcte, la renommer index.html.


Pourquoi cette vérification ? Parce qui si jamais vous téléchargez la page lorsqu'elle produit une erreur, même exceptionnelle, tous les visiteurs pendant 20 minutes ou 1 heure auront cette page d'erreur comme page d'accueil !

 

Et voici le script perl pour cela (on pourrait aussi le faire en bash, mais perl permet assez simplement des vérifications plus élaborées)

#!/usr/bin/perl system('wget -nd -q -O /home/USER/datas/indextemp.html http://www.mondomaine.com/index.php'); open(INDEX,"/home/USER/datas/indextemp.html"); while($l=){ $index.=$l }; close INDEX; if(length($index)>10000){ open(INDEX2,">/home/USER/www/index.html"); print INDEX2 $index; close INDEX2; }