<html> <head> <title>Phpcovid : Amélioration possible sur un serveur dédié</title> <meta name=author content="Bernard Chardonneau"> <meta name=copyleft content="Logiciel et données publiés dans le domaine public"> <meta name=robots content="noindex,follow"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link href="css/misenpage.css" rel="stylesheet" type="text/css"> <link href="css/styles.css" rel="stylesheet" type="text/css"> </head> <body> <div id="contenu"> <h1>Amélioration possible sur un serveur dédié</h1> Le site sur l'état de la vaccination COVID 19 en France présente plusieurs particularités :<br> <ul> <li>Nombre de pages à visualiser assez limité (quelques dizaines en tout):</li><br> <ul> <li>10 pages pour la vaccination à ce jour,</li> <li>4 pages pour les graphiques d'évolution de la vaccination,</li> <li>moins de 40 pages pour les différents tableaux d'évolution de la vaccination.</li> </ul> <br> <li>Pages identiques à fournir à tous les utilisateurs du site,</li> <br> <li>Les utilisateurs du site pourraient se compter en dizaines ou centaines de milliers par jour si ce site était connu comme le site officiel,</li><br> <li>L'actualisation périodique nécessaires des pages du site est nécessaire,</li><br> <li>Les mises à jour des pages peuvent être réalisées automatiquement,</li><br> <li>Ces mises à jour ne sont pas très fréquentes (1 fois par jour, 5 jours par semaine) et le meilleur moment pour les faire est connu (à quelques minutes près).</li> </ul> Sur la version du site qui est présentée, ce sont les scripts PHP appelés au moment où un utilisateur veut visualiser une page qui se chargent de :<br> <ul> <li>vérifier si une mise à jour des fichiers CSV locaux est opportune,</li> <li>faire cette mise à jour lorsque c'est le cas,</li> <li>mettre à jour les images lorsque les fichiers CSV locaux ont changé,</li> <li>générer la page html à afficher.</li> </ul> On peut rendre le serveur web plus performant en ne demandant pas de faire le plus gros du travail au moment où l'utilisateur demande une page. <br> <h2>Premier niveau : actualisation automatique des fichiers CSV locaux et des images</h2> Les systèmes d'exploitation actuels disposent d'un système de tâches périodiques : cron sur les systèmes d'exploitation dérivés d'UNIX (GNU/Linux, Mac-OS ...), mais Windows a aussi son système de tâches périodiques.<br> <br> Les fichiers CSV de référence qui contiennent les statistiques de vaccination sont actualisés 5 fois par semaine sur un laps de temps très court à partir de 19 H 05 (il resterait à savoir si l'heure d'actualisation est basée sur l'heure officielle (qui est décalée 2 fois par an en Europe tant que l'heure d'été n'a pas été supprimée), ou sur l'heure solaire.<br> <br> Des outils du système d'exploitation dérivés d'UNIX (awk/gawk, sed, grep et ses dérivés, sort, ...) permettent de fabriquer en une fraction de seconde les fichiers CSV locaux à partir des fichiers CSV de référence qu'on peut récupérer par une commande comme <tt>wget</tt> s'ils ne sont pas accessibles directement depuis un disque dur monté en réseau.<br> <br> Une fois les fichiers CSV locaux actualisé, on ferait de même pour les images variables du site (bargraphes et graphiques d'évolution).<br> <br> La tâche périodique qui fait ces deux mise à jour serait lancée à une heure précise peu après l'heure supposée d'actualisation des fichiers de référence (19 H 10, 19 H 15 ou 19 H 20).<br> <br> A part durant les quelques minutes qui suivent l'actualisation réelle des fichiers de référence, le site web afficherait toujours des données (textuelles et graphiques) à jour en ayant juste besoin de créer la page HTML qui utilise les données de la dernière version du fichier CSV local.<br> <br> <u>Remarque :</u> Dans le cas de ce site-ci, où c'est le script PHP appelé au moment d'afficher une page qui vérifie si le fichier CSV local doit être mis à jour, afin de limiter des vérifications inutiles trop fréquentes, on ne vérifie le fichier CSV de référence qu'au maximum une fois par demi-heure pour l'état de la vaccination à ce jour.<br> Le retard moyen pour la prise en compte de la nouvelle version du fichier CSV est de 15 minutes (entre 0 et 30), et pour ça, on fait jusqu'à 48 vérifications par jour du fichier CSV de référence.<br> Les fichiers CSV locaux sur l'évolution de la vaccination ne sont actualisés que si le fichier local sur la vaccination à ce jour l'a été au préalable.<br> Par rapport à cette manière de procéder, une mise à jour automatique seulement une fois par jour mais au bon moment (avec juste quelques minutes de retard sur l'arrivée supposée des nouvelles données) demande encore moins de ressources machine pour une meilleure réactivité. <br> <h2>Deuxième niveau : mise en cache des pages HTML</h2> Avec la tâche périodique qui se charge de maintenir à jour les fichiers CSV locaux et les images, il ne reste plus au script PHP qu'à générer la page HTML à afficher dans le navigateur.<br> <br> Le problème est que cette page pourra être demandée de nombreuses fois dans la journée par des utilisateurs différents, alors que son contenu ne changera qu'une fois par jour (5 fois par semaine à présent).<br> <br> De la même manière que sur ce site-ci, un script PHP peut fabriquer et garder sur le disque dur du serveur un fichier CSV local, il est possible de demander au script PHP d'écrire dans un fichier le contenu de la page HTML à envoyer, puis d'envoyer directement cette page à tous les utilisateurs du site qui la demandent.<br> <br> Le processus obéirait à l'algorithme suivant :<br> <pre> SI le fichier HTML en cache est plus ancien que le fichier CSV local ALORS Créer une nouvelle version de ce fichier HTML FIN SI Envoyer au navigateur web le fichier HTML en cache </pre> Dans le cas particulier des graphiques d'évolution de la vaccination, seuls ces graphiques évoluent chaque jour. La page HTML en cache n'a pas besoin d'être réactualisée. <br> <h2>Troisième niveau : actualisation des pages HTML par la tâche périodique</h2> On a déjà une tâche périodique qui actualise au bon moment dans la journée les fichiers CSV locaux et les images évolutives du site. Il est possible juste après de générer la nouvelle version des pages HTML en cache à partir des fichiers HTML de référence, des fichiers CSV locaux et de quelques scripts.<br> <br> Ces fichiers HTML étant mis à jour automatiquement au bon moment, le seul travail pour le serveur web sera de les envoyer tels quels 0 ceux qui consultent le site lorsqu'ils en font la demande. <br> <h2>En conclusion</h2> Alors que le site officiel sur la vaccination COVID 19 en France (et beaucoup de sites web actuels) abusent du javascript et nécessitent pour chaque utilisateur qui consulte une page beaucoup de calculs du coté du navigateur, qui quelquefois peut se trouver bloqué pendant de nombreuses secondes, il est facile de réaliser ces traitements en PHP coté serveur dans un laps de temps beaucoup plus bref.<br> <br> Et si le site est un site d'information dont les pages en nombre limité n'évoluent pas trop souvent, en préparant ces pages à l'avance, on pourra aussi réduire la charge de calcul coté serveur.<br> <br> Il suffit d'avoir la bonne approche qui, presque toujours consiste à utiliser les standards du web tels qu'ils existent depuis quelques décennies.<br> <br> </div> <div id="menu"> XXXMENU </div> </body> </html>