Contactar con soporte

Respondemos por correo, normalmente en dos días.

Google reCAPTCHA revisa este envío frente a abusos; se transmiten datos a Google. El script se carga solo al abrir el formulario.

← Todas las entradas

La lista de quién está en línea, anunciada en 2012 y ya activa

El 25 de agosto de 2012, una entrada de este blog anunció que los campos de estadísticas habían empezado a actualizarse por sí solos, y terminaba con una frase: «La función prevista, la lista "Who is online", ¡llegará pronto!»

Esa entrada todavía está aquí. La lista que anunciaba tardó catorce años en llegar. Ya existe, y el contador al que enlazaba aquella entrada ha estado funcionando todo ese tiempo.

Qué muestra

La página de estadísticas tiene un panel en vivo: cuántas personas hay en el sitio en este momento, y las más recientes de ellas, listadas — el país desde el que se conectaron, la ciudad cuando se conoce, en qué página del sitio están, y hace cuánto se las vio por última vez. Doce a la vez, las más recientes primero.

«En este momento» significa los últimos cinco minutos. Al cabo de una hora, las filas se eliminan por completo.

0560en la lista en vivola fila se guardaborradaminutos desde la última vez

Lo que "who" no significa

Nadie en esa lista está identificado. Se construye a partir del mismo hash diario de 16 bytes descrito en la entrada sobre contar sin usar una cookie — no hay nombre, ni cuenta, ni cookie, ni dirección IP almacenada detrás de ninguna fila.

Tampoco conserva más que la ruta de la página, no la dirección completa: /shop/boots, no el enlace completo con lo que sea que un motor de búsqueda o un boletín le haya añadido al final.

Y dos personas de la misma ciudad mirando la misma página son simplemente dos filas. Nada en el sistema puede decirle si se trata de dos lectores o de un lector con un teléfono y un portátil. Eso no es un descuido pendiente de corregir en una versión posterior. Es el diseño, y es la misma concesión que hace el contador en todo lo demás: lo suficiente para ser útil, no lo suficiente para seguirle la pista a nadie.

En vivo sin mantener una conexión abierta

La forma moderna de construir esto es un WebSocket, o server-sent events — el navegador mantiene una conexión abierta y el servidor envía actualizaciones a través de ella a medida que ocurren. Es la respuesta elegante, y aquí habría sido la equivocada.

El servidor web de este sitio usa un proceso por cada conexión abierta, y su verdadero trabajo es responder a las solicitudes de contador de un par de miles de sitios web. Una conexión mantenida abierta es un proceso que no puede responder a nadie más. Cincuenta personas viendo una página en vivo significarían cincuenta procesos inactivos, esperando para entregar un número que cambia cada pocos minutos.

Así que, en su lugar, la página pregunta cada quince segundos y obtiene un pequeño bloque de JSON. Alrededor de eso hay tres decisiones que importan más que el intervalo:

  • Si las solicitudes empiezan a fallar, se reduce a una vez por minuto — en lugar de seguir bombardeando un servidor que evidentemente ya lo está pasando mal.
  • En una pestaña en segundo plano deja de preguntar por completo, y se actualiza en el instante en que la pestaña vuelve al frente. Nadie está mirando una pestaña oculta, y la solicitud costaría exactamente lo mismo que una útil.
  • La línea updated N seconds ago cuenta hacia arriba de forma local, una vez por segundo, y no cuesta nada en absoluto. Solo hace falta una solicitud para cambiar el dato, no para envejecerlo.

Nada de esto es ingenioso. Es proporcionado, que en un servidor pequeño es la cualidad más valiosa de las dos. Una vista en vivo no debería costar más de ejecutar que aquello que está observando.

Una parte que no volvió

En septiembre de 2015 hubo una entrada sobre cómo la pestaña Users aprendió a distinguir a alguien que estaba leyendo activamente una página de alguien que la había abierto en una pestaña en segundo plano y se había olvidado de que existía.

Esa distinción no ha vuelto. La lista actual sabe cuándo se vio a un visitante por última vez; no sabe si está mirando. Vale la pena saberlo de verdad — una buena parte de los «visitantes» de cualquier sitio son una pestaña abandonada — así que está en la lista de cosas por construir.

Con suerte, no otros catorce años.

Pruébelo

La entrada de 2012 terminaba enlazando a un ejemplo en vivo, lo cual parece la forma correcta de terminar también esta. Por cierto, ese enlace original todavía funciona: el contador que hay detrás ha estado funcionando todo este tiempo y ha superado 1,3 millones de visitas.

Aquí hay un ejemplo en vivo, no hace falta cuenta para mirar.

Publicidad