Lista „Cine e online”, promisă în 2012 și acum live
Pe 25 august 2012, un articol de pe acest blog anunța că câmpurile de statistici începuseră să se reîmprospăteze singure și se încheia cu o propoziție: „Funcția planificată, lista «Cine e online», vine în curând!”
Acel articol este încă aici. Lista pe care o anunța a avut nevoie de paisprezece ani ca să apară. Acum există, iar contorul la care trimitea acel articol a funcționat tot timpul.
Ce arată
Pagina de statistici are un panou live: câte persoane sunt pe site în acest moment, iar cele mai recente dintre ele sunt afișate în listă — țara din care s-au conectat, orașul, acolo unde este cunoscut, pagina pe care se află și cât timp a trecut de când au fost văzute ultima dată. Câte douăsprezece odată, cele mai noi primele.
„În acest moment” înseamnă ultimele cinci minute. După o oră, rândurile sunt șterse definitiv.
Ce nu înseamnă „cine”
Nimeni din acea listă nu este identificat. Lista este construită din același hash zilnic de 16 octeți descris în articolul despre numărarea fără cookie — în spatele niciunui rând nu se află vreun nume, vreun cont, vreun cookie sau vreo adresă IP stocată.
De asemenea, păstrează doar calea paginii, nu adresa întreagă: /shop/boots, nu linkul complet cu tot ce a adăugat la final un motor de căutare sau un newsletter.
Iar două persoane din același oraș care se uită la aceeași pagină sunt pur și simplu două rânduri. Nimic din sistem nu poate deosebi doi cititori de un singur cititor care folosește un telefon și un laptop. Aceasta nu este o scăpare care așteaptă să fie reparată într-o versiune ulterioară. Așa a fost gândit și este același compromis pe care contorul îl face peste tot: suficient cât să fie util, nu suficient cât să poată urmări pe cineva.
Live fără o conexiune ținută deschisă
Modul modern de a construi așa ceva este un WebSocket sau server-sent events — browserul ține deschisă o conexiune, iar serverul trimite actualizări prin ea pe măsură ce apar. Este răspunsul elegant și ar fi fost cel greșit aici.
Serverul web al acestui site folosește câte un proces pentru fiecare conexiune deschisă, iar treaba lui reală este să răspundă la cererile de contor pentru câteva mii de site-uri. O conexiune ținută deschisă este un proces care nu poate răspunde nimănui altcuiva. Cincizeci de oameni care își urmăresc pagina live ar însemna cincizeci de procese care stau degeaba, așteptând să livreze un număr care se schimbă o dată la câteva minute.
Așa că pagina întreabă în schimb, la fiecare cincisprezece secunde, și preia un mic bloc de JSON. În jurul acestui lucru stau trei decizii care contează mai mult decât intervalul:
- Dacă cererile încep să eșueze, pagina reduce ritmul la o cerere pe minut — în loc să bombardeze un server care, evident, are deja probleme.
- Într-o filă din fundal nu mai întreabă deloc, iar când fila revine în prim-plan se reîmprospătează imediat. Nimeni nu se uită la o filă ascunsă, iar cererea ar costa exact cât una utilă.
- Rândul actualizat acum N secunde avansează local, o dată pe secundă, și nu costă absolut nimic. Este nevoie de o cerere doar pentru a schimba datele, nu pentru a le îmbătrâni.
Nimic din toate acestea nu este ingenios. Este proporțional, ceea ce pe un server mic este cea mai valoroasă dintre cele două calități. O vizualizare live nu ar trebui să coste mai mult decât lucrul pe care îl urmărește.
O parte care nu s-a întors
În septembrie 2015 a existat un articol despre fila Utilizatori, care învățase să deosebească pe cineva care citește activ o pagină de cineva care a deschis-o într-o filă din fundal și a uitat că există.
Această distincție nu a revenit. Lista actuală știe când a fost văzut ultima dată un vizitator; nu știe dacă acesta se uită. Chiar merită știut — o bună parte dintre „vizitatorii” oricărui site sunt, de fapt, o filă abandonată — așa că se află pe lista lucrurilor de construit.
Sperăm că nu vor mai trece încă paisprezece ani.
Încercați
Articolul din 2012 se încheia cu un link către un exemplu live, ceea ce pare modul potrivit de a-l încheia și pe acesta. Apropo, linkul original funcționează în continuare: contorul din spatele lui a funcționat tot timpul și a depășit 1,3 milioane de vizite.
Există un exemplu live aici, nu este nevoie de cont pentru a-l vedea.