Code source du fichier pages-doc/prognav.html

<html>

<head>
    <title>Phpcovid : Programmes coté navigateur</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>Les programmes coté navigateur</h1>
      <h2>Ils sont quelquefois nécessaires</h2>
      A l'origine du web, le langage HTML a été conçu pour diffuser du texte et
      des images. Déjà au siècle dernier, les navigateurs disponibles étaient
      capables de le faire.<br>
      <br>
      On pouvait aussi dès le début télécharger des fichiers de toute nature.<br>
      <br>
      Mais certains ont réalisé des sites web demandant au navigateur de faire des
      choses qui n'avaient pas été prévues au départ, comme de montrer des vidéos.<br>
      Dans ce cas, c'est un programme distinct du navigateur web, lancé par lui,
      qui se charge de faire le travail.<br>
      <br>
      Les vidéos constituent un cas particulier. Une nouvelle version du langages HTML
      a permit de les intégrer dans les pages d'un site. Les navigateurs d'aujourd'hui
      sont capables de montrer des vidéos de manière autonome. Dans le cas du format
      mp4 qui était soumis à des brevets, Mozilla Firefox permet de le faire sous
      GNU/Linux depuis 2014, mais ça a du l'être plus tôt avec d'autres systèmes
      d'exploitation propriétaires et payants.<br>
      <br>
      Actuellement, lorsque du son ou une vidéo est enregistré dans un fichier, tous
      les navigateurs peuvent en diffuser le contenu. Par contre, la transmission de
      son et d'images en direct, qu'il s'agisse de télévision ou de vidéoconférences,
      n'est pas supportée nativement par le langage html et donc par les navigateurs
      web. Ils font donc appel à des programmes tiers.<br>
      <br>
      Mais cela n'explique pas que certains sites web exigent des versions de navigateur
      de plus en plus récentes pour continuer à fonctionner. Par exemple, Youtube
      a fonctionné dans le passé avec la version 12 (2012) de Firefox et peut être
      auparant avec les versions 3 (2010). Mais alors que depuis sa version 27,
      Firefox est capable nativement de montrer des vidéos, youtube refuse maintenant
      de fonctionner avec cette version ou la version 31. Un numéro de version d'au
      moins la 5ème dizaine est devenu nécessaire. De même, pour les diffusions vidéo
      en direct, elle fonctionnaient très bien il y a quelques années avec Firefox 52,
      mais il faut à présent une version d'au moins la 6ème dizaine (62) pour continuer
      à voir ces vidéos.<br>
      <br>
      De nombreux sites web participent à la surenchère des numéros de version des
      navigateurs en devenant incompatibles avec d'anciennes versions de navigateur
      sur lequel ils fonctionnaient auparavant.<br>
      <br>
      Ce n'est pas le cas pour tous les sites web. Ainsi, le jeu massivement
      multi-joueurs <a href="https://fr.wikipedia.org/wiki/Travian">Travian</a> qui
      existe depuis 2005 utilise Javascript pour afficher divers compteurs (variation
      dans le temps de la quantité des différentes ressources d'un village, temps
      restant pour finir une construction, pour l'arrivée de marchands ou un déplacement
      de troupes), ce qui fait que les données numériques de la page sont actualisées
      en permanence alors qu'une nouvelle version de la page n'est envoyée par le
      serveur web que lorsqu'un événement est survenu.<br>
      <br>
      C'est un cas où l'utilisation de petits programmes (en javascript) coté navigateur
      est nécessaire. Et le système qu'ils ont développé il y a plus de 10 ans
      fonctionne toujours, aussi bien avec des navigateurs devenus anciens, qu'avec des
      versions récentes. A part la sécurisation des données de plus en plus ellaborée
      par le protocole https qui fait qu'en 2021, de plus en plus de sites ont arrêté
      de fonctionner avec Firefox 31, l'exemple de Travian montre qu'on pouvait déjà
      créer des automatismes avec javascript il y a plus de 10 ans et permet de douter
      de l'utilité d'évolutions qui ne fonctionnent qu'avec des navigateurs récents.<br>
      <br>
      <h2>En abuser peut nuire à l'ergonomie</h2>
      Certains moteurs de recherche et certains wikis (notamment) font des propositions
      à partir des premières lettres tapées d'une demande.<br>
      Dans la mesure où ce sont juste des suggestions, qu'on peut cliquer sur l'une
      d'elles pour gagner du temps, ou au contraire les ignorer, ce système qui suppose
      que le serveur récupère en temps réel chaque caractère saisi au clavier ne pose
      pas de problème.<br>
      Mais tous les sites web n'utilisent pas ce genre de mécanisme à bon escient.<br>
      <br>
      <h3>Cas du serveur FOG</h3>
      FOG (Free Open Ghost) est un logiciel libre qui permet d'enregistrer des
      images de disques durs d'ordinateurs et de les cloner sur d'autres ordinateurs
      avec lesquels le serveur FOG communique en réseau.<br>
      <br>
      Le pilotage du serveur FOG se fait avec un navigateur web.<br>
      <br>
      L'interface utilisateur du serveur FOG permet de gérer&nbsp;:<br>
      <ul>
          <li>les utilisateurs (ils disposent d'un compte pour accéder au serveur),</li>
          <li>les hôtes (ce sont des ordinateurs),</li>
          <li>les groupes (ce sont des groupes d'ordinateurs),</li>
          <li>les images (ce sont des modèles de contenu du disque dur),</li>
          <li>les tâches (opérations de capture ou de déploiement d'images),</li>
          <li>la configuration du serveur.</li>
      </ul>
      La sélection des hôtes est probablement l'action sur le serveur qu'on effectue
      la plus fréquemment. Pour celà, il y a une zone de saisie sans bouton de
      validation associé&nbsp;:<br>
      <br>
      <img src="img-doc/fog.png"><br>
      <br>
      On va donc taper quelque-chose dans la zone de saisie. Déjà, on ne la trouve
      pas vierge et la saisie de caractères n'efface pas forcément l'indication
      précédemment affichée (comme si l'indication "Chercher" au dessus ne suffisait
      pas&nbsp;!). Un effacement manuel de ce contenu inutile va faire perdre du temps.<br>
      <br>
      On tape alors le premier caractère du critère de recherche et le serveur FOG
      affiche immédiatement la liste de tous les ordinateurs (hôtes) qu'il connait
      avant de la corriger pour ne garder que certains.<br>
      <br>
      On tape un deuxième caractère et le même processus se produit.<br>
      <br>
      Quand on a fini la saisie, on s'aperçoit que certains ordinateurs sélectionnés
      n'ont pas leur nom qui correspond à ce qu'on a tapé&nbsp;! Peut être que la
      chaine "af" recherchée figure ailleurs dans le description de ces ordinateurs,
      mais dans ce cas, le minimum serait de demander à l'utilisateur à partir de quoi
      on doit faire la recherche&nbsp;!<br>
      <br>
      Donc déjà 3 défauts&nbsp;:<br>
      <ul>
          <li>caractères parasites dans la zone de saisie qui ne s'effacent pas
              tous seuls,</li>
          <li>affichage du résultat finalement plus lent car perte de temps avec
              des affichages pématurés, et javascript s'exécute plus lentement que
              PHP,</li>
          <li>des éléments sélectionnés qui ne correspondent pas au critère choisi
              (si on veut autoriser une recherche sur autre-chose que le nom de
              l'ordinateur, il vaut mieux prévoir des cases à cocher ou des boutons
              radio pour que l'utilisateur spécifie ce qu'il veut faire).</li>
      </ul>
      Ensuite, une fois qu'on a la liste cherchée à l'écran, il peut être utile de
      l'enregistrer dans un fichier. Sauf que si on le fait, au lieu de récupérer
      une page HTML avec à l'intérieur l'information utile, on récupère une page
      HTML avec le gros programme javascript qui a permit au navigateur d'afficher
      cette information&nbsp;!<br>
      <br>
      Au lieu d'utiliser du javascript pour faire n'importe quoi, un formulaire
      de saisie du critère de sélection avec un bouton de validation à cliquer
      une fois la saisie terminée permettrait grâce à un programme PHP d'avoir
      le résultat plus rapidement sans affichage intermédiaire parasite, et ce
      résultat figurerait dans le code source de la page HTML produite.<br>
      <br>
      Il y a un cas où l'utilisation de javascript est nécessaire dans l'interface
      web du serveur FOG. C'est pour la page qui affiche les taches en cours
      d'exécution (capture d'image ou clonage) avec un suivi de leur progression.<br>
      Mais pour toutes les autres pages de l'interface web de ce serveur, le
      traitement des demandes entièrement en PHP donnerait de bien meilleurs
      résultats à la fois en vitesse de traitement et en agrément d'utilisation.<br>
      <br>
      <h3>Cas d'un site de vente d'ampoules LED</h3>
      Un site marchand propose à la vente des ampoules LED et des luminaires.
      Pour les ampoules LED vissantes avec un culot E27, plus d'une centaine de
      modèles sont proposés. Aussi, un menu permet de sélectionner les ampoules
      qui obeissent à certains critères.<br>
      <br>
      Un premier critère proposé est le prix. Pour cela, on a un formulaire de
      saisie avec le prix minimum, le prix maximum et un bouton de validation.<br>
      <br>
      <img src="img-doc/selprix.png"><br>
      <br>
      Pour ce critère, pas de problème. Grâce au bouton de validation, la page
      affichée n'est actualisée que lorsqu'on a fini d'indiquer la gamme de
      prix acceptée.<br>
      <br>
      Un deuxième critère proposé est la puissance de l'ampoule. Pour cela, on
      dispose d'une longue liste de cases à cocher (la dernière puissance proposée
      est 100&nbsp;W), qui n'est pas munie d'un bouton de validation&nbsp;!<br>
      <br>
      <img src="img-doc/conso.png"><br>
      <br>
      Résultat, à chaque fois qu'on coche ou qu'on décoche une case, la page
      du site met plusieurs secondes à se réafficher pendant lesquelles on ne
      peut pas accéder à la liste des cases à cocher pour continuer d'indiquer
      dans quelles gammes de puissance on fait la recherche.<br>
      Coté utilisateur, ça fait une perte de temps, et coté serveur web, ça fait
      du temps de traitement en plus pour la préparation de pages intermédiaires
      qui ne serviront pas.<br>
      <br>
      Dans ce cas de ce site, il est possible que le traitement de la liste
      des puissances choisies soit fait entièrement en PHP, mais le problème
      d'ergonomie vient du fait que chaque action sur une case à cocher entraîne
      le réaffichage de la page au lieu d'attendre que l'utilisateur clique sur
      un bouton pour traiter d'un coup toute la sélection qu'il a effectuée.<br>
      <br>
      <h3>Cas d'un serveur du CNED</h3>
      Le cas du serveur permettant d'autoriser des élèves à suivre un enseignement
      à distance est similaire à celui de la sélection de puissance des ampoules
      LED.<br>
      <br>
      En france, la pandémie COVID 19 a emmené le ministère de l'éducation
      nationale à demander aux professeurs à faire de l'enseignement à distance.
      Pour celà, la plateforme de vidéoconférences du Centre National d'Enseignement
      à Distance a été utilisée.<br>
      <br>
      Elle dispose d'une salle d'attente pour autoriser les élèves entrants à
      suivre la conférence. Elle est visiblement réalisée en javascript avec 2
      listes&nbsp;:<br>
      <ul>
          <li>du coté gauche, la liste des élèves en attente,</li>
          <li>du coté droit, la liste des élèves acceptés.</li>
      </ul>
      Le professeur doit cliquer un par un sur les élèves en attente pour les
      accepter. A raison de 5 secondes par élève (dans un cas favorable&nbsp;!)
      pour que le serveur prenne en compte une acceptation, il faut plusieurs
      minutes pour accepter une classe complète.<br>
      <br>
      L'utilisation de formulaires PHP avec des cases à cocher, un bouton de
      validation pour les sélections partielles, et un autre pour sélectionner
      en bloc tous les entrants, aurait fait gagner un temps précieux tout en
      limitant la charge du serveur qui aurait eu des requêtes à traiter moins
      fréquemment.<br>
      <br>
      Certes, les serveurs du CNED ont été conçus pour les enseignements à
      distance que le CNED dispense, c'est à dire beaucoup moins d'enseignements
      que pour la moitié ou l'ensemble des classes d'un pays. Mais après le
      confinement de 2020, travailler sur le fonctionnement de ce serveur pour
      que la validation des élèves entrant ne prenne pas un temps monstrueux
      aurait été utile. Et si en plus, il y avait eu la possibilité d'avoir
      la liste des élèves acceptés par ordre alphabétique, plutôt que par ordre
      d'arrivée (pour ça, il existe une fonction de tri en PHP), il aurait été
      plus simple de noter les présents, et donc de trouver es absents.<br>
      Il suffisait de se pencher sur le problème.<br>
      <br>
  </div>

  <div id="menu">
      XXXMENU
  </div>
</body>

</html>