DEV Community

Cover image for Optimistic UI: Mejora la experiencia de usuario en tus aplicaciones frontend
Joan Peramás Ceras
Joan Peramás Ceras

Posted on

3

Optimistic UI: Mejora la experiencia de usuario en tus aplicaciones frontend

En el desarrollo frontend, uno de los retos más grandes es ofrecer una experiencia de usuario fluida y rápida. Los usuarios modernos esperan aplicaciones que respondan de inmediato, sin demoras ni interrupciones. Aquí es donde entra en juego el concepto de Optimistic UI.

¿Qué es Optimistic UI?

Optimistic UI, o Interfaz de Usuario Optimista, es una técnica de desarrollo en la que la aplicación asume inmediatamente el éxito de una acción del usuario y actualiza la interfaz en consecuencia, incluso antes de recibir la confirmación del servidor.

Ventajas de Optimistic UI

  1. - Mejora la experiencia de usuario: Al reducir el tiempo de espera percibido, la aplicación se siente más rápida y reactiva.
  2. - Aumenta la interactividad: Los usuarios pueden continuar interactuando con la aplicación sin interrupciones.
  3. - Reducción de la fricción: Minimiza la frustración del usuario al no tener que esperar a que las acciones se completen.

Implementación de Optimistic UI

Para ilustrar cómo implementar Optimistic UI, vamos a considerar un ejemplo común: una aplicación de tareas donde los usuarios pueden añadir y eliminar elementos de una lista.

Paso 1: Actualización optimista de la UI

Primero, actualizamos la interfaz de usuario inmediatamente después de que el usuario realice una acción, como añadir una nueva tarea.

const addTask = async (newTask) => {
  // Actualización optimista de la UI
  setTasks([...tasks, newTask]);

  try {
    // Enviar la nueva tarea al servidor
    await api.addTask(newTask);
  } catch (error) {
    // Revertir la UI en caso de error
    setTasks(tasks);
    console.error('Error al añadir la tarea:', error);
  }
};
Enter fullscreen mode Exit fullscreen mode

Paso 2: Manejo de errores

Es crucial manejar posibles errores del servidor y revertir la UI en caso de que algo salga mal.

const addTask = async (newTask) => {
  const previousTasks = [...tasks];

  // Actualización optimista de la UI
  setTasks([...tasks, newTask]);

  try {
    // Enviar la nueva tarea al servidor
    await api.addTask(newTask);
  } catch (error) {
    // Revertir la UI en caso de error
    setTasks(previousTasks);
    console.error('Error al añadir la tarea:', error);
  }
};
Enter fullscreen mode Exit fullscreen mode

Paso 3: Sincronización con el servidor

En algunos casos, puede ser necesario sincronizar el estado de la UI con el servidor después de realizar varias acciones optimistas.

const syncTasksWithServer = async () => {
  try {
    const serverTasks = await api.getTasks();
    setTasks(serverTasks);
  } catch (error) {
    console.error('Error al sincronizar las tareas con el servidor:', error);
  }
};

// Llamada a la función de sincronización en intervalos regulares o en ciertos eventos
useEffect(() => {
  const interval = setInterval(syncTasksWithServer, 60000);
  return () => clearInterval(interval);
}, []);
Enter fullscreen mode Exit fullscreen mode

Casos de uso para Optimistic UI

Optimistic UI es especialmente útil en aplicaciones donde la latencia del servidor puede afectar la experiencia del usuario:

  • Aplicaciones de mensajería: Enviar mensajes sin esperar la confirmación del servidor.
  • Sistemas de gestión de contenido: Editar y publicar contenido sin demoras.
  • Plataformas de comercio electrónico: Añadir o quitar productos del carrito de compras de manera instantánea.

Conclusión

Optimistic UI es una técnica poderosa que puede transformar la experiencia de usuario en tus aplicaciones, haciéndolas más rápidas y fluidas. Aunque requiere un manejo cuidadoso de errores y sincronización, los beneficios superan con creces los desafíos.

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (0)

Cloudinary image

Optimize, customize, deliver, manage and analyze your images.

Remove background in all your web images at the same time, use outpainting to expand images with matching content, remove objects via open-set object detection and fill, recolor, crop, resize... Discover these and hundreds more ways to manage your web images and videos on a scale.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay