¿Cómo rastrea Quora a los espectadores de una pregunta / respuesta / publicación de blog?

Descargo de responsabilidad: en realidad no estoy empleado por Quora, por lo que no puedo hacer más que una suposición educada sobre cómo funcionan los elementos internos del sitio web. Sin embargo, esta es mi mejor suposición, basada en lo que sé del diseño de aplicaciones web.

Establecería una tabla en la base de datos del sitio como referencia cruzada entre las ID de usuario de Quora y las ID únicas de respuestas. (En SQL, esta sería una tabla de 2 columnas, con ambas columnas que contienen enteros de 64 bits, o lo que Quora use para los ID. Quora puede usar algo diferente, como una base de datos NoSQL; habría una construcción equivalente en alguna parte). la clave principal (o la primera columna de la clave principal) sería la ID de respuesta, lo que hace que sea fácil preguntar “¿Cuántos usuarios han visto esta respuesta?” haciendo el equivalente de:

SELECCIONE EL CONTEO (*) DE answers_read WHERE answer_id = nnnnn;

Marcar que un usuario había leído una respuesta sería tan fácil como:

INSERTAR EN RESPUESTAS LEER (answer_id, user_id) VALUES ( nnnnn , uuuuu );

Sin embargo, realizaría esta inserción como una tarea asincrónica después de enviar los datos de la página a la pantalla; no es necesario retener los datos de la página solo para poner una marca en la base de datos.

Para los casos en los que las respuestas se leen como un gran bloque en una pregunta, tomaría un elemento conocido en la parte inferior de cada respuesta, como su elemento “marca de tiempo / enlace permanente”, y diría: “Si esto se desplaza a la vista, cuente la respuesta inmediatamente arriba como leída “. Establecería un evento de JavaScript en ese elemento para que se active cuando se haga visible en la ventana gráfica del navegador, y envíe una solicitud AJAX al servidor cuando lo haga, para marcar la respuesta asociada como leída.

Naturalmente, por razones de rendimiento, gran parte de esto se almacenaría en caché, y podría configurar el código de generación de páginas para hacer algo como, si el usuario ya ha leído una respuesta, omita el código JavaScript que hace que la marca AJAX “lea “para esa respuesta, porque marcar una respuesta como leída dos veces es redundante.

Punta de sombrero: Karan Bansal para el A2A.

Actualización y lectura de una base de datos.

Vea la respuesta de Eric Bowersox para una respuesta mucho más detallada que esta.