React Performance with Server Components

Rate this content
Bookmark

React Server Components ofrecen un método efectivo para mejorar el rendimiento de las aplicaciones web al renderizar componentes en el servidor y transmitirlos al cliente en tiempo real. Esta sesión cubrirá la funcionalidad y los beneficios de React Server Components, mostrando cómo pueden aumentar la velocidad y la capacidad de respuesta de la aplicación.

Examinaremos el papel de los componentes asíncronos, la gestión eficiente de datos y el uso estratégico de las características modernas de React para optimizar los tiempos de carga y la interactividad. Con ejemplos del mundo real y consejos prácticos, aprenderás cómo integrar estos componentes para mejorar el rendimiento de tu aplicación web y proporcionar una mejor experiencia de usuario.

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

Aurora Scharff
Aurora Scharff
20 min
22 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Mi nombre es Aurora, soy desarrolladora web de Noruega. Hoy, te enseñaré cómo elevar la velocidad, interactividad y experiencia del usuario con componentes de React. Estaré codificando un gestor de tareas de proyecto y mejorándolo usando Next.js, Prisma, Azure SQL y Tailwind CSS. Revisaremos el código, comenzando con el importante componente de diseño. También aprenderemos cómo mejorar la navegación y la obtención de datos, mejorar la estabilidad visual y la experiencia del usuario, corregir la funcionalidad de búsqueda y agregar filtros de categoría con estados de carga. Además, exploraremos el uso de React 19 hooks para mejorar la interactividad. Finalmente, optimizaremos el renderizado y lograremos mejores puntuaciones en Lighthouse para un mejor rendimiento. En general, esta charla cubre una variedad de técnicas y herramientas para mejorar los proyectos de React y ofrecer una mejor experiencia de usuario.

1. Introducción a los componentes de React y configuración del proyecto

Short description:

Mi nombre es Aurora, soy desarrolladora web de Noruega. Hoy, te enseñaré cómo elevar la velocidad, la interactividad y la experiencia del usuario con componentes de React. Estaré codificando un gestor de tareas de proyecto usando Next.js, Prisma, Azure SQL y Tailwind CSS. La aplicación tiene una carga inicial lenta, pero funciona sin JavaScript. Las puntuaciones de Lighthouse muestran tiempos de carga lentos, pero buena estabilidad de diseño. Revisemos el código, comenzando con el componente de diseño importante.

Hola a todos. Mi nombre es Aurora. Soy desarrolladora web de Noruega y trabajo como consultora en Enmeta en Oslo. Y estoy emocionada de hablar hoy de forma remota en React Summit US, porque estaré enseñando cómo elevar la velocidad, la interactividad y la experiencia del usuario con componentes de React.

Y voy a estar codificando algo inspirado en una característica que he construido para mi proyecto de consultoría actual donde estoy usando activamente componentes de React. Así que esto es una especie de gestor de tareas de proyecto. Y la configuración aquí es el enrutador de la aplicación Next.js. Y luego estoy usando Prisma como mi ORM y una base de datos Azure SQL, y Tailwind para CSS.

Y lo que notarás con esta aplicación es que tiene una carga inicial muy lenta aquí. Y eso es porque he ralentizado las búsquedas de datos a propósito. Pero una vez que la aplicación está cargada, en realidad no está tan mal. Puedo navegar entre estas pestañas muy lentamente, y puedo buscar aquí usando un formulario simple, usando una solicitud get para enviar parámetros al enrutador. Y estos son todos componentes del servidor, lo que significa que no se envía JavaScript al cliente para estos componentes. Y es solo HTML y enlaces y un formulario. Y las cosas funcionan en realidad sin JavaScript. Este es un buen caso base porque funcionará incluso si estamos en un dispositivo con un bajo poder de procesamiento que no puede ejecutar JS efectivamente.

También voy a revisar las puntuaciones de Lighthouse para esta aplicación. Así que como verás, correspondiente a esta baja carga inicial, tengo un primer renderizado con contenido grande, y un índice de velocidad que están en 3.5 segundos, lo cual no es muy bueno. Y puedes ver el impacto de estos aquí. Y eso es porque, como puedes ver en la tira de película aquí, estoy cargando. Estoy esperando que todos los componentes del servidor se rendericen en el servidor antes de mostrar cualquier cosa. Sin embargo, debido a eso, también tengo un cambio de diseño acumulativo de cero. Así que eso es realmente bueno porque no hay inestabilidad visual aquí. Y un tiempo total de bloqueo de cero porque no hay JavaScript para bloquear el bucle aquí. Así que las métricas generales son bastante malas, pero no las peores porque tenemos un buen TBT y cambio de diseño acumulativo. Pero por supuesto, la aplicación no se siente muy bien.

Así que déjame también revisar rápidamente el código aquí. Y el componente más importante es el diseño aquí. Y es un componente del servidor. Así que puede ser asíncrono y puede buscar asíncronamente la información del proyecto y el resumen de tareas de mi base de datos aquí.

2. Improving navigation and data fetching

Short description:

Traer la base de datos, renderizar la información del proyecto y las pestañas de estado, consultar la base de datos dinámicamente, usar suspense para mejorar la navegación por pestañas, enviar datos a los componentes para ejecución paralela, desbloquear la carga inicial con fallbacks de suspense, transmitir en componentes del servidor, los componentes ahora son componibles.

Y solo estoy trayendo la base de datos. Y también se ha ralentizado y usando algunas cookies para hacer esto dinámico. Y esto ahora se está utilizando para renderizar una información del proyecto, algunas pestañas de estado. Y luego también tengo una propiedad children aquí, que corresponde a mi página TSX dentro del dinámico. Y esto está usando la pestaña y la búsqueda para directamente dentro del componente del servidor, consultar la base de datos y obtener los resultados filtrados aquí. Así que de nuevo, estas son solicitudes dinámicas. Si hubiera sido estático, sería realmente fácil. Pero como es dinámico, queremos, o tenemos que esperarlo en tiempo de ejecución en el servidor aquí.

Así que básicamente lo que quiero hacer es elevar la velocidad, interactividad y experiencia del usuario de esta aplicación y mejorar los web vitals que son malos sin empeorar los buenos. Y comencemos mejorando la experiencia del usuario de estas pestañas porque no navegan de inmediato. La razón de esto es que estamos esperando que el componente del servidor termine de renderizar en el servidor antes de que podamos navegar. Así que para solucionar esto, usaré un suspense y me permitirá desbloquear la página y renderizar un fallback. Así que voy a hacer un suspense implícito con un archivo load TSX aquí. Y solo voy a dejar un esqueleto simple. Y ahora estoy renderizando un límite de suspense aquí y puedo navegar libremente por estas pestañas mientras espero que el componente del servidor se transmita. Así que eso es bueno ahora. Sin embargo, todavía estoy bloqueado en la carga inicial aquí durante esos tres segundos y medio. Y eso es porque en mi diseño, estoy esperando el proyecto y el resumen de tareas. Y en realidad estoy ejecutando estos secuencialmente aunque no dependen uno del otro. Así que el primer pensamiento aquí podría ser ejecutarlos en paralelo usando promise all y eso ayudaría, todavía estaríamos bloqueados en la carga inicial por el await aquí. Así que vamos a enviar los datos a los componentes que están usando los datos. Así que vamos a cortar esto y dejarlo dentro de la información del proyecto. Eliminar los props y simplemente ponerlo aquí. Así. Y luego voy a hacer lo mismo para el resumen de tareas. Deshazte de esto y déjalo aquí e impórtalo. Y todavía estaré bloqueado hasta que ponga un límite de suspense aquí alrededor de estos datos dinámicos. Así que voy a hacer eso simplemente obteniendo un div simple que diga cargando, y voy a poner esto también alrededor de mis pestañas de estado aquí. Y lo que verás ahora es que he podido desbloquear la carga inicial con estos fallbacks de suspense y transmitir en los componentes del servidor a medida que se completan. Y cada componente ahora es responsable de sus propios datos, lo que significa que ahora son componibles.

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.
Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Acelerando tu aplicación React con menos JavaScript
React Summit 2023React Summit 2023
32 min
Acelerando tu aplicación React con menos JavaScript
Top Content
Mishko, the creator of Angular and AngularJS, discusses the challenges of website performance and JavaScript hydration. He explains the differences between client-side and server-side rendering and introduces Quik as a solution for efficient component hydration. Mishko demonstrates examples of state management and intercommunication using Quik. He highlights the performance benefits of using Quik with React and emphasizes the importance of reducing JavaScript size for better performance. Finally, he mentions the use of QUIC in both MPA and SPA applications for improved startup performance.
Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
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.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
AI para Desarrolladores de React
React Advanced 2024React Advanced 2024
142 min
AI para Desarrolladores de React
Featured Workshop
Eve Porcello
Eve Porcello
El conocimiento de las herramientas de AI es fundamental para preparar el futuro de las carreras de los desarrolladores de React, y la suite de herramientas de AI de Vercel es una vía de acceso accesible. En este curso, examinaremos más de cerca el Vercel AI SDK y cómo esto puede ayudar a los desarrolladores de React a construir interfaces de transmisión con JavaScript y Next.js. También incorporaremos APIs de terceros adicionales para construir y desplegar una aplicación de visualización de música.
Temas:- Creación de un Proyecto de React con Next.js- Elección de un LLM- Personalización de Interfaces de Transmisión- Construcción de Rutas- Creación y Generación de Componentes - Uso de Hooks (useChat, useCompletion, useActions, etc)
Tracing: Frontend Issues With Backend Solutions
React Summit US 2024React Summit US 2024
112 min
Tracing: Frontend Issues With Backend Solutions
Featured WorkshopFree
Lazar Nikolov
Sarah Guthals
2 authors
Los problemas de frontend que afectan a tus usuarios a menudo son provocados por problemas de backend. En esta masterclass, aprenderás cómo identificar problemas que causan páginas web lentas y malos Core Web Vitals usando tracing.
Luego, pruébalo tú mismo configurando Sentry en un proyecto Next.js ya preparado para descubrir problemas de rendimiento, incluyendo consultas lentas a la base de datos en una sesión interactiva de programación en pareja.
Saldrás de la masterclass siendo capaz de:- Encontrar problemas de backend que podrían estar ralentizando tus aplicaciones de frontend- Configurar tracing con Sentry en un proyecto Next.js- Depurar y solucionar problemas de rendimiento deficiente usando tracing
Este será un evento en vivo de 2 horas donde tendrás la oportunidad de codificar junto con nosotros y hacernos preguntas.
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!
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
React Summit 2022React Summit 2022
173 min
Construye una aplicación WordPress sin cabeza con Next.js y WPGraphQL
Top Content
WorkshopFree
Kellen Mace
Kellen Mace
En esta masterclass, aprenderás cómo construir una aplicación Next.js que utiliza Apollo Client para obtener datos de un backend de WordPress sin cabeza y usarlo para renderizar las páginas de tu aplicación. Aprenderás cuándo debes considerar una arquitectura de WordPress sin cabeza, cómo convertir un backend de WordPress en un servidor GraphQL, cómo componer consultas usando el IDE GraphiQL, cómo colocar fragmentos GraphQL con tus componentes, y más.
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
WorkshopFree
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