Cómo mostrar resultados de un proceso largo en tiempo real en una aplicación web

Un caso interesante en el que me tocó trabajar fue la implementación de un sistema de gamification para una red social de viajeros en la que trabajaba.

Los responsables del producto estaban muy interesados en fomentar la generación de contenido por parte de los usuarios del sitio y se les ocurrió que ofrecer «galardones» a quienes más contenido subían a la plataforma era una buena forma de lograrlo.

Dejando de lado la discusión sobre la viabilidad de la estrategia, hay unas cuantas lecciones interesantes desde el punto de vista de la implementación técnica.

Algo de información de contexto:

  1. Las reglas de obtención de los galardones no eran triviales (Tampoco eran super complejas, básicamente, según el tipo de contenido de que se trataba había un número mínimo de aportes que permitían alcanzar el siguiente nivel y ese número iba aumentando, haciendo que alcanzar los niveles más elevados fuera mucho más difícil que los primeros).
  2. Era muy importante dar satisfacción inmediata al usuario que hiciera aportes.

Dimos muchas vueltas respecto de cómo lograr esto, que implicaba la actualización de contadores en una base de datos relativamente grande, la evaluación de las reglas y el rendering del mensaje adecuado para la situación que el usuario acababa de generar.

La solución que encontramos fue hacer un pequeño truco: hicimos el cálculo en el FrontEnd y en el BackEnd:

Lo primero que hacíamos era enviar la información que el cliente necesitaría para galardonar al usuario en caso de ser necesario (las reglas de cálculo de los galardones y el estado actual de la cuenta del usuario) y luego asentábamos ese cambio en la base de datos.

De esta forma logramos que el usuario tuviera su cucarda al momento exacto en que cruzaba el umbral y, a la vez, que el resultado no se perdiera.

Esta es una forma más de tratar con procesos largos que, en un entorno de usuarios impacientes (como es una red social), funciona muy bien :).

Un tiempo más tarde leí que Apple había usado un truco similar para lograr que el IPhone mostrara la lista de aplicaciones disponibles al momento en que el teléfono se encendía: tenían pre-calculada una imagen estática que se mostraba mientras la aplicación terminaba de cargar.

Siempre me gustaron estos ejemplos de combinación de ingeniería con cierta picardía (como el de los espejos en el hotel de ascensores lentos).

¿Tenés algún otro ejemplo de cómo tratar con este tipo de situación?

mchojrin

Por mchojrin

Ayudo a desarrolladores PHP a afinar sus habilidades técnicas y avanzar en sus carreras

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.