Code source du fichier pages-doc/servdedie.html

<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&nbsp;:<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&nbsp;:<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&nbsp;: 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&nbsp;H&nbsp;10, 19&nbsp;H&nbsp;15 ou
      19&nbsp;H&nbsp;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&nbsp;:</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&nbsp;:<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>