Noticias: ¿por qué estamos haciendo esto mal?

Hola, mi nombre es Dmitry Karlovsky y tengo noticias para ti. Bueno, como noticia, una nueva mirada a lo habitual en forma de otro artículo. Lo más probable es que llegue a él desde cualquier fuente de noticias. O no lo recibirá si las noticias se publican en el momento equivocado. No importa lo interesante que sea este artículo para ti.


Feed de noticias típico


La cuestión es cómo se forman las cintas y cómo el usuario interactúa con ellas. Y aquí, desafortunadamente, como siempre, la solución más simple es extremadamente incorrecta. A ver por qué.


Métodos de consumo


Supongamos que un usuario nos solicita una lista de algunas entidades. La forma en que el usuario verá estas entidades depende de sus objetivos. Hay dos formas de consumir:


  1. Búsqueda activa El usuario está buscando algo específico. Aplica el filtrado y la clasificación para reducir la salida, después de lo cual escanea secuencialmente los materiales, verificando cada uno de ellos. Es importante que la lista que está viendo no cambie durante el proceso de visualización, de lo contrario, puede omitir fácilmente lo que está buscando.


  2. Búsqueda pasiva El usuario no busca nada específico. Por el contrario, quiere que el servicio vea lo que este servicio tiene y muestre al usuario algo que le interesará. Aquí es importante mostrar al usuario los materiales más relevantes en este momento para un usuario en particular. Y lo que ya vio es no mostrarlo en absoluto.



Por lo tanto, las fuentes de noticias están diseñadas solo para el consumo pasivo de estas mismas noticias. Sí, el usuario puede limitar el rango de intereses con la ayuda de los filtros, pero no está buscando ninguna noticia específica, ya que lo más probable es que aún no lo sepa y fue al feed para averiguarlo. Y su satisfacción depende de la cantidad de materiales más interesantes (relevantes) que vea y de la cantidad de interés que vea.


Criterios de relevancia


Muchos factores pueden influir en la relevancia. Por ejemplo, cambiar la prioridad de una tarea asignada a usted en el administrador de tareas es una noticia muy importante, que debe mostrarse al usuario lo antes posible. Incluso si después de eso hubo comentarios de una docena de otras tareas.


Pero hay criterios generales, como:


  1. Visibilidad Si el usuario ya ha visto esta noticia y reaccionó de alguna manera (desplazada, eliminada, marcada como leída, fue a los detalles, etc.), la segunda vez no quiere verla.
  2. Relevancia Algunas noticias pierden relevancia con el advenimiento de noticias más recientes sobre el mismo tema. Por ejemplo, de las noticias sobre el cambio en el estado de la tarea, solo la última es interesante y refleja el estado actual.
  3. Fecha Las nuevas noticias son a menudo más interesantes. Y algunas noticias antiguas ya no son tan interesantes que es mejor no mostrarlas (por ejemplo, la noticia de que el agua caliente se cortó hace un día).

Cintas en vida salvaje


En la gran mayoría de los casos, las fuentes de noticias se forman emitiendo materiales ordenados por la fecha de su creación, publicación o cambio. Es decir, los criterios de relevancia restantes (más importantes) simplemente no se tienen en cuenta. En última instancia, esto lleva a la insatisfacción del usuario. Algunos ejemplos para ilustrar:


VKontakte feed


El usuario abre las noticias por primera vez y las ve secuencialmente: todo está bien aquí. Después de un tiempo, aparece una notificación en la parte superior de que han aparecido algunas noticias recientes. Y luego tiene una elección difícil:


  1. Continuar hojeando la alimentación
  2. Rebobine el feed hasta el principio para ver las últimas noticias (que no es un hecho que sea más relevante).

Dado que la cinta es casi infinita, y la pestaña del navegador no puede vivir para siempre, y nadie ha cancelado la curiosidad. Entonces, tarde o temprano, el usuario volverá a estar al "principio" de la cinta. Ok, desplázate hacia abajo. Nada augura problemas, cuando de repente las noticias que el usuario ya ha visto comienzan a continuar. Y aquí nuevamente, el usuario no es una elección difícil:


  1. Enrolle la cinta rápida y rápidamente, bajando el tráfico de Internet en la tubería, con la esperanza de terminar las noticias que aún no había visto.
  2. Conduzca en cinta y haga otra cosa.

Resulta que cada vez que el usuario no recibe noticias, nunca las ve. Pero podrían ser interesantes para él. Además, podrían ser críticos y cambiar radicalmente su vida.


Este problema es tan típico que es justo darle un nombre especial. Que sea el "Síndrome de Conciencia Fragmentada".


Inicio Habra


La OFS aquí se ve agravada por la paginación. Al cambiar de página, el usuario ve las noticias de la página anterior. Y si se demora un poco más en alguna página, entonces puede obtener fácilmente algunas páginas de "masacre" seguidas. Describí este problema con más detalle en una nota sobre Pajinización .


Youtube


En el "recomendado" solo da 18 videos que a menudo dan miedo y eso es todo. Para ver algo nuevo en las recomendaciones, debe eliminar manualmente todo lo que no causó interés. Por supuesto, un usuario raro hará esto. En las "suscripciones", simplemente se ordenan por fecha, por lo que el viejo, pero posiblemente interesante para el usuario, nunca lo verá. A menos que se tope con ellos en el "recomendado".


Raíz del problema


Cuando el usuario abrió por primera vez el feed por primera vez, solo tiene un punto de recepción de noticias, inmediatamente después de la vista previa. Los mira hacia abajo y de repente aparece un segundo punto de entrada, en algún lugar arriba. Y es difícil decir dónde las noticias son más relevantes. Cuando, después de un descanso, regresa, inmediatamente tiene al menos dos puntos: el comienzo de la cinta y el lugar donde terminó de ver las noticias la última vez. Y dado que en privado el usuario no tiene la oportunidad de ver las noticias antes de verlas previamente, estos puntos de recepción de noticias se multiplican y multiplican.


Solución


El punto de recepción de noticias relevantes debe ser solo uno. Al mismo tiempo, se deben recibir las noticias más relevantes en tiempo real. Entre todas las novedades, se pueden distinguir los siguientes grupos:


  1. Visible Las noticias que previamente recogimos para él y ahora las ve en la pantalla.
  2. Visto Noticias que el usuario ya ha visto y desplazado. Cuando la noticia deja el área visible hacia arriba, puede marcarla de forma segura como leída.
  3. La historia Una lista de noticias generada para un usuario específico. Esto incluye tanto las noticias que el usuario ya ha visto como las que está viendo en este momento.

Grupos de noticias


Idealmente, incluso la recarga de la página no debería cambiar nada en la lista de noticias. Cuando el usuario solicita más noticias (haciendo clic en el botón o desplazándose hacia abajo), seleccionamos otra parte de las noticias más relevantes en este momento y las colocamos en la historia. Por lo tanto, el usuario tiene una idea clara de la cinta como algo interesante y que no cambia. Todo lo que ha visto está en el orden en que lo vio. Y sacudiéndose, constantemente obtiene algo interesante, sin preocuparse de que algo se pierda. Es cierto que puede ser necesario dar cuerda durante mucho tiempo si hay muchas noticias.


Relevancia


Lo más simple, por supuesto, es simplemente considerar las últimas noticias más relevantes. Pero puede dejar que el usuario ayude al servicio a comprender lo que le interesa y lo que no. Puede hacerlo agregando la posibilidad de eliminar noticias. Si el usuario no solo se desplazó por las noticias, sino que las eliminó para que no obstruyera su historia, entonces este tipo de noticias no le interesan y esta información se puede utilizar para su posterior compilación.


API


Dado que nuestra historia se repone y se ve desde el final, no podemos usar la paginación tradicional, ya que las noticias se saltarán constantemente entre las páginas. Además, solicitar unas 100500 páginas para el DBMS puede ser demasiado pesado. Por lo tanto, para el muestreo de datos, utilizaremos anclas. Para hacer esto, indicaremos los siguientes datos en la solicitud:


  1. Ancla El identificador de las noticias a partir de las cuales deben devolverse los datos. Si no se especifica el ancla, la última noticia leída se toma como el ancla.
  2. Offset El número de noticias para probar. Este número puede ser positivo y luego la noticia regresa después del ancla. O negativo y luego la noticia vuelve al ancla.

Si el sesgo es negativo, pero no hay una cantidad necesaria de noticias antes del ancla, entonces simplemente devuelve cuánto es. Por la diferencia en el número de los solicitados y el número de visitantes, el cliente puede entender que estamos al comienzo de la historia.


Si el sesgo es positivo y no hay una cantidad necesaria de noticias después del presentador, la historia se complementa con el número requerido con las noticias más relevantes en este momento. Si la noticia ha terminado por completo, nuevamente, devolvemos cuánto es y el cliente detecta el final de la cinta.


Script de consulta


Abrimos la cinta, todavía no tenemos ningún ancla:


GET /feed?offset=5 

Hacemos una solicitud de noticias no leídas:


 SELECT FROM history WHERE user = 123 AND read_at NOT NULL ORDER BY id ASC limit 5 

El usuario ve una selección de noticias no leídas en las que se detuvo la última vez:


 [ { id : 3232 } , { id : 5343 } , { id : 7346 } , { id : 9825 } , { id : 9967 } ] 

El usuario se levanta para ver las noticias que vio la última vez:


 GET /feed?anchor=3232&offset=-5 

 SELECT FROM history WHERE user = 123 AND id < 3232 ORDER BY id DESC limit 5 

 [ { id : 323 } , { id : 329 } , { id : 544 } , { id : 843 } , { id : 898 } ] 

El usuario se agita para ver algo nuevo:


 GET /feed?anchor=7346&offset=5 

 SELECT FROM history WHERE user = 123 AND id > 7346 ORDER BY id ASC limit 5 

Si recibe una pequeña noticia, seleccionamos el número necesario de las más relevantes que están ausentes en el historial y las agregamos al historial, después de lo cual devolvemos todo junto:


 [ { id : 38574} , { id : 47246} , { id : 52378} , { id : 69238} , { id : 73294} ] 

Realizaciones en vida salvaje


Si conoce algún servicio que implemente feeds de esta forma o de una forma similar, me complacerá publicar enlaces aquí para que los lectores puedan apreciar la conveniencia de este enfoque.

Source: https://habr.com/ru/post/es416555/


All Articles