La liste « qui est en ligne », annoncée en 2012 et désormais là
Le 25 août 2012, un article de ce blog annonçait que les champs de statistiques avaient commencé à s'actualiser tout seuls, et se terminait par une phrase : « La fonctionnalité prévue, la liste “Who is online”, arrive bientôt ! »
Cet article est toujours là. La liste qu’il annonçait a mis quatorze ans à arriver. Elle existe maintenant, et le compteur vers lequel cet article pointait a tourné pendant tout ce temps.
Ce qu'elle affiche
La page de statistiques dispose d'un panneau en direct : combien de personnes se trouvent sur le site en ce moment, et les plus récentes d'entre elles listées en détail — le pays depuis lequel elles se sont connectées, la ville quand celle-ci est connue, sur quelle page du site elles se trouvent, et depuis combien de temps elles ont été vues pour la dernière fois. Douze à la fois, les plus récentes en premier.
« En ce moment » signifie les cinq dernières minutes. Au bout d'une heure, les lignes sont purement et simplement supprimées.
Ce que « qui » ne signifie pas
Personne dans cette liste n'est identifié. Elle est construite à partir du même hachage quotidien de 16 octets décrit dans l'article sur le comptage sans cookie — il n'y a ni nom, ni compte, ni cookie, ni adresse IP stockée derrière la moindre ligne de cette liste.
Elle ne conserve également que le chemin de la page plutôt que l'adresse complète : /shop/boots, et non le lien complet avec ce qu'un moteur de recherche ou une newsletter aurait pu ajouter à la fin.
Et deux personnes de la même ville consultant la même page ne forment tout simplement que deux lignes. Rien dans le système ne peut dire s'il s'agit de deux lecteurs ou d'un seul lecteur sur un téléphone et un ordinateur portable. Ce n'est pas un oubli qui attend d'être corrigé dans une version ultérieure. C'est la conception même, et c'est le même compromis que le compteur fait partout ailleurs : assez pour être utile, pas assez pour suivre qui que ce soit à la trace.
En direct sans garder une connexion ouverte
La manière moderne de construire cela est un WebSocket, ou des server-sent events — le navigateur maintient une connexion ouverte et le serveur y pousse les mises à jour au fur et à mesure qu'elles se produisent. C'est la réponse élégante, et elle aurait été la mauvaise ici.
Le serveur web de ce site utilise un processus par connexion ouverte, et son véritable travail consiste à répondre aux requêtes de comptage pour environ deux mille sites web. Une connexion maintenue ouverte est un processus qui ne peut répondre à personne d'autre. Cinquante personnes regardant leur page en direct signifieraient cinquante processus immobilisés, en attente de délivrer un nombre qui ne change que toutes les quelques minutes.
La page interroge donc le serveur à la place, toutes les quinze secondes, et récupère un petit bloc de JSON. Autour de cela se trouvent trois décisions qui comptent plus que l'intervalle lui-même :
- Si les requêtes commencent à échouer, l'intervalle repasse à une fois par minute — plutôt que de marteler un serveur qui traverse visiblement déjà une période difficile.
- Dans un onglet en arrière-plan, elle cesse complètement d'interroger le serveur, et se rafraîchit dès l'instant où l'onglet redevient actif. Personne ne regarde un onglet caché, et la requête coûterait exactement autant qu'une requête utile.
- La ligne updated N seconds ago s'incrémente localement, une fois par seconde, et ne coûte absolument rien. Seule une requête peut changer la donnée ; elle n'est pas nécessaire pour simplement la vieillir.
Rien de tout cela n'est brillant. C'est proportionné, ce qui, sur un petit serveur, est la plus précieuse des deux qualités. Une vue en direct ne devrait pas coûter plus cher à faire tourner que la chose qu'elle observe.
Une partie qui n'est pas revenue
En septembre 2015, il y a eu un article sur l'onglet Users apprenant à distinguer quelqu'un en train de lire activement la page de quelqu'un qui l'avait ouverte dans un onglet en arrière-plan et avait oublié qu'elle existait.
Cette distinction n'est pas revenue. La liste actuelle sait quand un visiteur a été vu pour la dernière fois ; elle ne sait pas s'il regarde. C'est une information qui vaut vraiment la peine d'être connue — une bonne part des « visiteurs » de n'importe quel site est un onglet abandonné — c'est donc sur la liste des choses à construire.
Espérons que cela ne prendra pas encore quatorze ans.
La voir en direct
L'article de 2012 se terminait par un lien vers un exemple en direct, ce qui semble être la bonne façon de terminer celui-ci également. Ce lien d'origine fonctionne d'ailleurs toujours : le compteur qui se trouve derrière a tourné pendant tout ce temps et a dépassé 1,3 million de visites.
Il y a un exemple en direct ici, aucun compte n'est nécessaire pour le consulter.