Construyamos Suspense 🥁

Bookmark
Rate this content

A medida que el impulso del desarrollo web se inclina nuevamente hacia el servidor, el streaming se está volviendo cada vez más popular. Específicamente, el streaming fuera de orden con características como React Suspense — uno de los poderes mágicos detrás de los Server Components.

Construyamos nuestra propia versión (simplificada) para explorar cómo funciona, qué problemas estamos tratando de resolver y cómo se ve este futuro del desarrollo web.

This talk has been presented at React Advanced 2024, check out the latest edition of this React Conference.

Julian Burr
Julian Burr
20 min
28 Oct, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Hola, mi nombre es Julian, y estoy extremadamente emocionado de hablar sobre suspense. Suspense te permite renderizar una UI de reserva mientras esperas que se resuelvan las tareas asincrónicas, convirtiéndolo en el héroe no reconocido de los componentes de React. En la charla de hoy, explicaré por qué suspense es crucial para los server components de React. Antes de profundizar en los server components, entendamos la historia del renderizado web y los problemas que planteó. Luego introdujimos el server-side rendering (SSR) y la static-side generation (SSG) para abordar estos problemas. Sin embargo, el SSR tenía problemas como tamaños de paquete grandes, hidratación lenta y tiempo de respuesta inicial del servidor lento. Los server components de React resuelven estos problemas al permitirnos diferenciar entre componentes estáticos y dinámicos. Pero para abordar el tercer problema, necesitamos suspense. Hoy, construiremos una versión simplificada de suspense en el servidor para demostrar su funcionamiento conceptual y cómo mejora el proceso de renderizado desde el SSR clásico hasta el streaming y el streaming fuera de orden. Vamos a sumergirnos en el código construyendo una aplicación de películas llamada Notflix. Tenemos diferentes secciones como el título, los miembros del reparto y películas similares. Los componentes obtienen sus propios datos de forma asincrónica, convirtiéndolos en server components. En la forma clásica de renderizado del lado del servidor, recorremos los hijos, los ejecutamos como server components y renderizamos la respuesta HTML. Para mejorar la experiencia del usuario, introducimos el streaming, que nos permite iniciar la respuesta en el servidor, mantener la conexión abierta y agregar al documento de respuesta a medida que los datos están disponibles. Al usar el método write proporcionado por Express, podemos escribir en el flujo de respuesta en lugar de recopilar todo el HTML. Manejar las promesas en secuencia asegura que los componentes se rendericen en el orden correcto. Aunque el renderizado del lado del servidor ha mejorado, todavía no hay un estado de carga o un manejo adecuado de los hijos suspendidos. Para abordar esto, introducimos suspense en el servidor y construimos un componente de suspense con una UI de reserva e hijos. Mantenemos un seguimiento de los hijos suspendidos usando un objeto simple con identificadores únicos. En el renderizador, verificamos el objeto suspendido y recorremos las entradas para manejar cada hijo suspendido. Para reemplazar el estado de carga con el contenido una vez que esté disponible, necesitamos ejecutar funciones asincrónicas para recopilar y concatenar el contenido, eliminar la entrada del objeto suspendido y usar JavaScript para manejar el intercambio de elementos en el navegador. Para reemplazar el renderizador de reserva con el contenido, necesitamos envolver la reserva en un diff y agregar un identificador usando un atributo de datos. Podemos usar el truco de CSS de 'display: contents' para evitar que el diff afecte el diseño. A continuación, envolvemos el contenido disponible en una etiqueta de plantilla para agregarlo al documento sin renderizar. Finalmente, usamos elementos personalizados y un callback conectado para intercambiar el límite de carga con el contenido basado en el identificador. Esto nos permite reemplazar múltiples renderizadores de reserva. Al envolver cada sección en su propio límite, la experiencia del usuario mejora significativamente ya que cada sección puede cargarse de forma independiente. Este enfoque también enfatiza la importancia de usar las características y funcionalidades existentes de la plataforma, como el almacenamiento en caché del navegador, para mejorar el rendimiento. ¡Gracias por ver y disfruten el resto de la conferencia!
Available in English: Let's Build Suspense 🥁

1. Introduction to Suspense in React

Short description:

Hola, mi nombre es Julian, y estoy extremadamente emocionado de hablar sobre suspense. Suspense te permite renderizar una interfaz de usuario de reserva mientras esperas que se resuelvan las tareas asincrónicas, convirtiéndolo en el héroe no reconocido de los componentes de React. En la charla de hoy, explicaré por qué suspense es crucial para los componentes de servidor de React.

Hola, mi nombre es Julian, y estoy muy desanimado por no poder estar en Londres en persona para React advanced, pero espero que aún tenga una sesión algo interesante para todos ustedes desde el otro lado del mundo. Así que vamos a sumergirnos en ello.

Quiero hablar sobre suspense y un descargo de responsabilidad al principio. Soy un gran fan de suspense desde que comenzaron a mostrar versiones de vista previa allá por 2016. Para aquellos de ustedes que no lo saben, suspense básicamente te permite renderizar límites dentro de tu aplicación, para renderizar una interfaz de usuario de reserva, generalmente algún tipo de estado de carga, mientras cualquier cosa debajo de ese límite en tu árbol de aplicaciones todavía está esperando que algo asincrónico se resuelva. Así que eso podría ser llamadas a una API de terceros, podría ser carga diferida de fragmentos de JavaScript, lo que sea. Y eso es bastante genial en el cliente. Pero creo que suspense en el servidor es igualmente impresionante. E incluso iría tan lejos como para decir que es el héroe no reconocido de los componentes de React, porque los componentes de servidor de React tal como los conocemos no serían realmente viables sin suspense. Y en la charla de hoy, espero poder mostrar por qué creo que es así, y con suerte desmitificar algunas cosas que están sucediendo bajo el capó.

Read also

2. Introduction to Server Components and Suspense

Short description:

Antes de sumergirnos en los componentes de servidor, entendamos la historia del renderizado web y los problemas que planteó. Luego introdujimos el renderizado del lado del servidor (SSR) y la generación del lado estático (SSG) para abordar estos problemas. Sin embargo, SSR tenía problemas como tamaños de paquetes grandes, hidratación lenta y tiempo de respuesta inicial del servidor lento. Los componentes de servidor de React resuelven estos problemas al permitirnos diferenciar entre componentes estáticos y dinámicos. Pero para abordar el tercer problema, necesitamos suspense. Hoy, construiremos una versión simplificada de suspense en el servidor para demostrar su funcionamiento conceptual y cómo mejora el proceso de renderizado desde el SSR clásico hasta el streaming y el streaming fuera de orden.

Antes de entrar en eso, sin embargo, quiero tocar rápidamente cómo llegamos a los componentes de servidor en primer lugar, cómo suspense se relaciona con todo eso solo para que todos estén en la misma página. Ahora, si miramos la historia del renderizado web, y la evolución del renderizado web en los últimos 15 a 20 años, muchos de nosotros probablemente aún recordaremos los días en que estábamos escribiendo HTML simple, y luego pasamos al servidor y creamos dinámicamente ese HTML con lenguajes como PHP.

Y eso tenía un gran inconveniente, que es, si haces mucho trabajo en el servidor, por ejemplo, para obtener datos de diferentes fuentes, ese tiempo de respuesta inicial del servidor puede volverse realmente lento. Y eso es obviamente muy malo para la experiencia del usuario. Así que cuando comenzamos a introducir JavaScript en nuestras aplicaciones para hacerlas más dinámicas, también introdujimos conceptos como AJAX, que nos permitieron, después de que la primera carga de la página ya está hecha, volver al servidor y obtener más cosas dinámicamente bajo demanda.

Y eso es bastante genial, porque significa que podemos descargar mucho de ese trabajo pesado al cliente y tener un tiempo de respuesta del servidor rápido, renderizar algún tipo de estado de carga, y luego hacer más trabajo. Y eso es tan conveniente que comenzamos a hacerlo más y más, hasta que finalmente nos acercamos a lo que ahora llamamos aplicaciones de una sola página. Y es entonces cuando todos los frameworks que conocemos y amamos como React, como Vue, como Angular comienzan a volverse realmente populares. Para obtener lo mejor de ambos mundos, sin embargo, luego reintroducimos rápidamente los conceptos de renderizado del lado del servidor y generación del lado estático en esos frameworks. Así que eso esencialmente trajo tres problemas principales todavía con él. Uno fue el tamaño del paquete. Así que desde las aplicaciones de una sola página, los tamaños de los paquetes de JavaScript siguieron creciendo y creciendo y se convirtieron en un problema. Con él, el segundo problema es el problema de la hidratación. Así que incluso si renderizas del lado del servidor tu aplicación de React, todavía necesita enviar todo ese JavaScript al cliente, y necesita ejecutar todo el JavaScript para hidratar toda la aplicación solo en caso de que algunas partes de tu aplicación usen lógica del lado del cliente, como estado, como efectos, como escuchadores de eventos, ese tipo de cosas. Y la hidratación es lenta. Así que la hidratación realmente comenzó a convertirse en uno de los principales cuellos de botella de rendimiento en las aplicaciones web modernas. El tercer problema es que estamos de vuelta en el servidor ahora. Así que nuevamente, tenemos el problema donde si el servidor hace mucho trabajo, y ese trabajo es lento, ese tiempo de respuesta inicial del servidor puede volverse realmente lento muy rápidamente.

Así que introducimos los componentes de servidor de React. Los componentes de servidor principalmente intentan hacer una cosa. Permite a los desarrolladores decirle al empaquetador qué componentes son estáticos y solo necesitan ser renderizados una vez, y cuáles son dinámicos y necesitan ser enviados al cliente y necesitan ser hidratados. Así que en una aplicación normal realista, esto puede realmente reducir masivamente la cantidad de JavaScript que necesitas enviar al cliente y la cantidad de hidratación que está ocurriendo. Así que eso es increíble, pero por sí solos, los componentes de servidor no hacen realmente nada sobre ese tercer problema. Así que ahí es donde entra suspense. Y para mostrar cómo suspense aborda ese problema, lo que vamos a hacer hoy es construir nuestra propia versión de suspense en el servidor desde cero. Y quiero ser muy claro aquí, esto no es cómo suspense está implementado en React. Esto es muy deliberadamente una versión muy simplificada, muy simplificada de ello. El punto principal aquí es solo mostrar cómo funciona conceptualmente, y también para mostrar cómo en las diferentes etapas mejora la experiencia. Así que comenzamos con lo que yo llamaría renderizado del lado del servidor clásico. Luego podemos ver cómo podemos mejorarlo introduciendo streaming, y luego cómo podemos mejorarlo aún más haciendo streaming fuera de orden, que es lo que suspense en el servidor nos permite hacer.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Simplificando los Componentes del Servidor
React Advanced 2023React Advanced 2023
27 min
Simplificando los Componentes del Servidor
Top Content
React server components simplify server-side rendering and provide a mental model of components as pure functions. Using React as a library for server components allows for building a basic RSC server and connecting it to an SSR server. RSC responses are serialized virtual DOM that offload code from the client and handle interactivity. The client manifest maps serialized placeholders to real components on the client, enabling dynamic rendering. Server components combine the best of classic web development and progressive enhancement, offering the advantage of moving logic from the client to the server.
Explorando los fundamentos de los Componentes del Servidor React
React Day Berlin 2023React Day Berlin 2023
21 min
Explorando los fundamentos de los Componentes del Servidor React
Top Content
This Talk introduces React Server Components (RSC) and explores their serialization process. It compares RSC to traditional server-side rendering (SSR) and explains how RSC handles promises and integrates client components. The Talk also discusses the RSC manifest and deserialization process. The speaker then introduces the Waku framework, which supports bundling, server, routing, and SSR. The future plans for Waku include integration with client state management libraries.
Y Ahora Entiendes los Componentes del Servidor React
React Summit 2024React Summit 2024
27 min
Y Ahora Entiendes los Componentes del Servidor React
Top Content
In this Talk, Kent C. Dodds introduces React Server Components (RSCs) and demonstrates how to build them from scratch. He explains the process of integrating RSCs with the UI, switching to RSC and streaming for improved performance, and the benefits of using RSCs with async components. Dodds also discusses enhancements with streaming and server context, client support and loaders, server component rendering and module resolution, handling UI updates and rendering, handling back buttons and caching, and concludes with further resources for diving deeper into the topic.
Una Guía Práctica para Migrar a Componentes de Servidor
React Advanced 2023React Advanced 2023
28 min
Una Guía Práctica para Migrar a Componentes de Servidor
Top Content
React query version five is live and we'll be discussing the migration process to server components using Next.js and React Query. The process involves planning, preparing, and setting up server components, migrating pages, adding layouts, and moving components to the server. We'll also explore the benefits of server components such as reducing JavaScript shipping, enabling powerful caching, and leveraging the features of the app router. Additionally, we'll cover topics like handling authentication, rendering in server components, and the impact on server load and costs.
Componentes del Servidor: La Épica Historia de Renderizar UX
React Summit 2023React Summit 2023
26 min
Componentes del Servidor: La Épica Historia de Renderizar UX
Top Content
This Talk introduces server components in React, which provide an intermediate format for rendering and offer advantages for both client-side and server-side rendering. Server components reduce bundle size on the client and improve search engine optimization. They abstract the rendering process, allowing for faster rendering and flexibility in choosing where to render components. While server components are still in the experimental stage, Next.js is a good starting point to try them out.
RSCs en Producción: 1 Año Después
React Summit 2024React Summit 2024
24 min
RSCs en Producción: 1 Año Después
This Talk explores the experience of shipping server components in production and highlights the benefits and challenges of using Server Components in Next.js apps. The Talk discusses the deployment of UploadThing and the use of AppRouter for safe production usage. It delves into the implementation of different layouts, data fetching, and code centralization for improved performance. The Talk also covers the use of server components for performance optimization and latency handling. Additionally, it explores the use of Edge and Lambda for partial pre-rendering and the challenges faced with webpack performance and hydration. Overall, the Talk emphasizes the benefits and challenges of working with Server Components in Next.js applications.

Workshops on related topic

Dominando React Server Components y Server Actions en React 19
React Summit US 2024React Summit US 2024
150 min
Dominando React Server Components y Server Actions en React 19
Featured Workshop
Maurice de Beijer
Maurice de Beijer
¡Llamando a todos los desarrolladores de React! Únete a nosotros para una masterclass inmersiva de 4 horas profundizando en React Server Components y Server Actions. Descubre cómo estas tecnologías revolucionarias están transformando el desarrollo web y aprende a aprovechar todo su potencial para construir aplicaciones rápidas y eficientes.

Explora el mundo de React Server Components, combinando sin problemas el renderizado del lado del servidor con la interactividad del lado del cliente para un rendimiento y experiencia de usuario incomparables. Sumérgete en React Server Actions para ver cómo combinan la interactividad del lado del cliente con la lógica del lado del servidor, facilitando el desarrollo de aplicaciones interactivas sin las limitaciones tradicionales de las API.

Obtén experiencia práctica con ejercicios prácticos, ejemplos del mundo real y orientación experta sobre la implementación de estas tecnologías en tus proyectos. Aprende temas esenciales como las diferencias entre Server y Client Components, optimización de la obtención de datos, pasando datos de manera efectiva y maximizando el rendimiento con nuevos hooks de React como useActionState, useFormStatus y useOptimistic.

Ya sea que seas nuevo en React o un profesional experimentado, esta masterclass te equipará con el conocimiento y las herramientas para elevar tus habilidades de desarrollo web. Mantente a la vanguardia y domina la tecnología de vanguardia de React 19. No te lo pierdas: ¡regístrate ahora y desata todo el poder de React!
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
Workshop
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
La Puerta al Backend: Guía del Desarrollador Frontend para el Desarrollo Full-Stack
React Summit US 2023React Summit US 2023
160 min
La Puerta al Backend: Guía del Desarrollador Frontend para el Desarrollo Full-Stack
Top Content
Workshop
Amy Dutton
Amy Dutton
Esta masterclass te guiará a través del ciclo de vida del desarrollo de productos para crear una aplicación web del mundo real. Aprenderás sobre los Componentes del Servidor React, construyendo un sistema de diseño dentro de Storybook, y utilizando el desarrollo frontend para acercarte a convertirte en un desarrollador full-stack. La masterclass cubrirá el aumento de la confianza en tu aplicación con pruebas unitarias e implementando autenticación y autorización. Tendrás la oportunidad de trabajar a través de las características del producto y examinar un proyecto real de RedwoodJS, obteniendo valiosa experiencia en el desarrollo de productos del mundo real. RedwoodJS hace que sea simple acercarse al desarrollo full-stack, y esta masterclass te dará las habilidades que necesitas para crear tus propias aplicaciones web del mundo real.
Patrones Avanzados de Despliegue de Aplicaciones con Componentes de Servidor React (feat. un Marco RSC DIY)
React Summit US 2023React Summit US 2023
104 min
Patrones Avanzados de Despliegue de Aplicaciones con Componentes de Servidor React (feat. un Marco RSC DIY)
Top Content
Workshop
 Greg Brimble
Greg Brimble
El ecosistema de desarrolladores siempre está avanzando rápidamente y este año no ha sido una excepción. Los Componentes de Servidor React pueden ofrecer una mejora significativa a la experiencia del desarrollador y al rendimiento de la aplicación. Pero creo que es justo decir que este nuevo paradigma de servidor primero puede ser complicado de entender!En la primera mitad de esta masterclass, exploraremos los Componentes de Servidor React desde cero: construyendo nuestro propio mini marco meta para ayudarnos a entender cómo funcionan los RSCs. Descubriremos exactamente qué se produce en una construcción RSC y conectaremos esas piezas para formar una aplicación completa.A continuación, ¡lo desplegaremos! Cloudflare también ha tenido un año ocupado — Smart Placement, en particular, es una nueva tecnología que hemos desarrollado que se ajusta perfectamente al modelo RSC. Exploraremos por qué eso tiene sentido para nuestra aplicación de masterclass, y realmente lo desplegaremos en la Plataforma de Desarrolladores de Cloudflare.Finalmente, ampliaremos un poco más nuestra aplicación, utilizando D1 (nuestra base de datos SQL sin servidor) para mostrar realmente el poder del Componente de Servidor React cuando se combina con Smart Placement.Deberías salir de esta masterclass con una mayor comprensión de cómo funcionan los Componentes de Servidor React (tanto detrás de las escenas como también cómo tú como desarrollador puedes usarlos día a día), así como una visión de algunos de los nuevos patrones de despliegue que ahora son posibles después de las recientes innovaciones en el espacio de la plataforma.
Construyendo Componentes de Servidor Reutilizables en NextJS
React Summit US 2023React Summit US 2023
88 min
Construyendo Componentes de Servidor Reutilizables en NextJS
Workshop
Will Bishop
Mettin Parzinski
2 authors
React continúa evolucionando su capacidad beta, los Componentes de Servidor de React, y continúan desarrollándolos en asociación con marcos como NextJS.En esta masterclass, los asistentes aprenderán qué son los Componentes de Servidor de React, cómo construirlos y usarlos eficazmente en NextJS, y se centrarán en una de las principales ventajas de React/NextJS: la reutilización a través de componentes.También cubriremos tecnologías beta relacionadas habilitadas por el directorio `app`, como los layouts anidados y las acciones del servidor (capacidad alfa/experimental).¡Únete a nosotros para esta masterclass práctica de 120 minutos!Tecnologías:
React, JavaScript/Typescript, NextJS, Miro
Desatando los Componentes del Servidor React: Una Inmersión Profunda en el Desarrollo Web de la Próxima Generación
React Day Berlin 2023React Day Berlin 2023
149 min
Desatando los Componentes del Servidor React: Una Inmersión Profunda en el Desarrollo Web de la Próxima Generación
Workshop
Maurice de Beijer
Maurice de Beijer
¡Prepárate para potenciar tus habilidades de desarrollo web con los Componentes del Servidor React! En esta inmersiva masterclass de 3 horas, desbloquearemos el potencial completo de esta tecnología revolucionaria y exploraremos cómo está transformando la forma en que los desarrolladores construyen aplicaciones web rápidas y eficientes.
Únete a nosotros mientras nos adentramos en el emocionante mundo de los Componentes del Servidor React, que combinan sin problemas el renderizado del lado del servidor con la interactividad del lado del cliente para un rendimiento y una experiencia de usuario inigualables. Obtendrás experiencia práctica a través de ejercicios prácticos, ejemplos del mundo real y orientación experta sobre cómo aprovechar el poder de los Componentes del Servidor en tus propios proyectos.
A lo largo de la masterclass, cubriremos temas esenciales, incluyendo:- Entender las diferencias entre los Componentes del Servidor y del Cliente- Implementar Componentes del Servidor para optimizar la obtención de datos y reducir el tamaño del paquete JavaScript- Integrar Componentes del Servidor y del Cliente para una experiencia de usuario fluida- Estrategias para pasar datos efectivamente entre componentes y gestionar el estado- Consejos y mejores prácticas para maximizar los beneficios de rendimiento de los Componentes del Servidor React