Bonjour,
J'ai regardé le code rapidement mais je ne l'ai pas encore testé. Il y a des choses qui ne me paraissent pas aider à un fonctionnement fluide. En tout premier lieu, j'ai vu que le programme (sur le client) interroge le serveur toutes les 3 secondes. Je ne me trompe pas ? Je ne sais pas quel volume de données est alors retourné mais toutes les 3 secondes c'est beaucoup. D'autant que le serveur ferme à chaque fois la connexion quand il a répondu au client obligeant, toutes les 3 secondes à recommencer un couteux processus d'authentification de la requête même si c'est une XMLHttpRequest. Déjà là, il faudrait chercher à gagner en rapidité en laissant simplement les connexions tcp ouvertes ce qui est très simple et ferait j'en suis sûr gagner beaucoup en vitesse de réponse.
Mais plus fondamentalement, ce sont les requêtes régulières clients -> serveur qui sont consommatrices d'où, ce que je disais dans ma réponse précédente, l'intérêt d'utiliser des websockets où c'est le serveur qui "push" vers les clients mais seulement quand il y a des modifications susceptibles de les intéresser.
Par ailleurs, même si cela ne représente pas des volumes très importants, je chercherais à optimiser en chargeant les fichiers json de description dans le localstorage du navigateur (avec une mise à jour au besoin de ces fichiers directement dans le localstorage).
Enfin, après ce premier petit tour dans le programme, je m'interroge quant à savoir s'il n'est pas possible de "déporter" plus de traitements sur le navigateur qui est grandement plus rapide qu'un ESP. Mais là il faudrait regarder plus en détails.