A lista de quem está online, anunciada em 2012 e já ativa
A 25 de agosto de 2012, um artigo neste blog anunciou que os campos de estatísticas tinham começado a atualizar-se sozinhos, e terminava com uma frase: «A funcionalidade planeada, a lista "Who is online", está a chegar em breve!»
Esse artigo continua aqui. A lista que anunciava demorou catorze anos a chegar. Existe agora, e o contador para o qual esse artigo remetia esteve a funcionar todo esse tempo.
O que mostra
A página de estatísticas tem um painel ao vivo: quantas pessoas estão no site neste momento, e uma lista com as mais recentes delas — o país a partir do qual se ligaram, a cidade quando essa informação é conhecida, em que página do site se encontram, e há quanto tempo foram vistas pela última vez. Doze de cada vez, as mais recentes primeiro.
«Neste momento» significa os últimos cinco minutos. Ao fim de uma hora, as linhas são eliminadas por completo.
O que «who» não significa
Ninguém nessa lista é identificado. É construída a partir do mesmo hash diário de 16 bytes descrito no artigo sobre contar sem cookie — não há nome, não há conta, não há cookie nem endereço IP guardado por trás de nenhuma das suas linhas.
Também guarda apenas o caminho da página, e não o endereço completo: /shop/boots, e não a ligação completa com o que quer que um motor de busca ou uma newsletter tenha acrescentado ao fim.
E duas pessoas da mesma cidade a ver a mesma página são simplesmente duas linhas. Nada no sistema permite distinguir se isso são dois leitores ou um leitor num telemóvel e num portátil. Isto não é uma falha à espera de ser corrigida numa versão posterior. É a conceção, e é o mesmo compromisso que o contador assume em todo o resto: suficiente para ser útil, não suficiente para seguir seja quem for.
Ao vivo sem manter uma ligação aberta
A forma moderna de construir isto é um WebSocket, ou server-sent events — o navegador mantém uma ligação aberta e o servidor envia atualizações através dela à medida que acontecem. É a resposta elegante, e teria sido a errada neste caso.
O servidor web deste site usa um processo por cada ligação aberta, e o seu verdadeiro trabalho é responder a pedidos de contador para uns dois mil sites. Uma ligação mantida aberta é um processo que não pode responder a mais ninguém. Cinquenta pessoas a ver uma página ao vivo significariam cinquenta processos parados, à espera de entregar um número que muda a cada poucos minutos.
Por isso, em vez disso, a página pergunta, a cada quinze segundos, e obtém um pequeno bloco de JSON. À volta disso há três decisões que importam mais do que o intervalo:
- Se os pedidos começarem a falhar, passa a fazê-lo apenas uma vez por minuto — em vez de continuar a martelar um servidor que evidentemente já está com dificuldades.
- Num separador em segundo plano, deixa de perguntar por completo, e atualiza no instante em que volta a esse separador. Ninguém está a ver um separador escondido, e o pedido custaria exatamente o mesmo que um pedido útil.
- A linha updated N seconds ago conta para cima localmente, uma vez por segundo, e não custa nada. Só é preciso um pedido para mudar os dados, não para os envelhecer.
Nada disto é inteligente. É proporcionado, o que num servidor pequeno é a propriedade mais valiosa das duas. Uma vista ao vivo não devia custar mais a executar do que aquilo que está a observar.
Uma parte que não regressou
Em setembro de 2015 houve um artigo sobre o separador Users a aprender a distinguir alguém a ler ativamente uma página de alguém que a tinha aberto num separador em segundo plano e se tinha esquecido de que existia.
Essa distinção não regressou. A lista atual sabe quando um visitante foi visto pela última vez; não sabe se está a olhar. Vale mesmo a pena saber isso — uma boa parte dos «visitantes» de qualquer site são um separador abandonado — por isso está na lista de coisas para construir.
Esperemos que não sejam outros catorze anos.
Experimente
O artigo de 2012 terminava com uma ligação para um exemplo ao vivo, o que parece ser a forma certa de terminar também este. Essa ligação original ainda funciona, já agora: o contador por trás dela esteve sempre em funcionamento e já ultrapassou 1,3 milhões de visitas.
Há um exemplo ao vivo aqui, sem ser preciso conta nenhuma para ver.