El arma secreta de React: Aprovechando las características concurrentes para un rendimiento de primera categoría

Rate this content
Bookmark

Descubre cómo las características concurrentes a menudo pasadas por alto de React, como startTransition, useDeferredValue y Suspense, pueden transformar el rendimiento y la capacidad de respuesta de tu aplicación. Aprende técnicas prácticas para priorizar actualizaciones críticas, manejar estados de carga de manera elegante y crear experiencias de usuario fluidas incluso con interacciones de datos complejas.

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

Dara Olayebi
Dara Olayebi
25 min
25 Oct, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Voy a hablar sobre la concurrencia dentro de React y cómo puedes usarla para mejorar el rendimiento dentro de tus aplicaciones. La concurrencia es crucial para optimizar la capacidad de respuesta y garantizar una buena experiencia de usuario en aplicaciones complejas. React divide el proceso de renderizado en fases de render y commit, permitiendo la interrupción de la fase de render para priorizar las interacciones del usuario. El programador de tareas de React maneja las tareas en pequeños fragmentos, asegurando una experiencia de usuario fluida y capacidad de respuesta. Las tareas de alta prioridad incluyen interacciones del usuario, mientras que las tareas de menor prioridad implican la obtención de datos o el renderizado de listas largas. React introdujo nuevos hooks, useTransition y useDeferredValue, para manejar las prioridades de actualización de estado. El hook de valor diferido permite diferir las actualizaciones de valores de UI no críticos, mientras que Suspense para la obtención de datos mejora el rendimiento de la obtención de datos en aplicaciones React. La concurrencia es útil para manejar entradas de búsqueda en tiempo real, cambios de pestañas o componentes sin problemas, renderizar listas grandes y animar transiciones. Sin embargo, hay desventajas en la concurrencia, como posibles retrasos en actualizaciones no urgentes y beneficios limitados para componentes costosos. La concurrencia puede agregar carga a la CPU y requiere una comprensión del comportamiento en segundo plano de React para una depuración efectiva. Usa suspense en componentes de nivel padre para la obtención de datos. El perfilado de rendimiento puede ayudar a probar la efectividad de los hooks de transición.

1. Introducción a la Concurrencia en React

Short description:

Voy a hablar sobre la concurrencia en React y cómo puedes usarla para mejorar el rendimiento de tus aplicaciones. La agenda de hoy incluye un trasfondo sobre el problema de rendimiento, la concurrencia bajo el capó en React, las principales API concurrentes introducidas en React 18, casos de uso y desventajas. La concurrencia es crucial para optimizar la capacidad de respuesta y garantizar una buena experiencia de usuario en aplicaciones complejas.

Estoy feliz de estar aquí. Gracias por estar aquí. Gracias Natalia por la introducción. Voy a hablar sobre la concurrencia en React y cómo puedes usarla para mejorar el rendimiento de tus aplicaciones. Y sí, soy ingeniero de software y actualmente trabajo en Spotify.

Antes de entrar en la charla en sí, solo un poco de trasfondo sobre mi trayectoria y cómo me adentré en el frontend. Así que comenzó alrededor de 2017. Estudié un curso de ciencias de la computación o un curso muy relacionado con la tecnología, pero construí un sitio web como parte de mi carrera y lo odié absolutamente. Pero me encontré aprendiendo HTML y CSS después de graduarme. Y luego hice eso por un tiempo y finalmente conseguí mi primer puesto en tecnología en 2018. Y básicamente esta fue mi introducción a los frameworks de frontend y más específicamente React. Y luego trabajé allí por un tiempo y me mudé a una startup de comercio de criptomonedas donde trabajaba más intensamente solo con React. Y luego en 2022 comencé un rol de full stack, que es mi primer rol de full stack en Spotify. Así que en realidad trabajo más con el backend estos días, pero trabajo con Java en el backend y React en el frontend.

Bien, suficiente sobre mí. Así que hoy, aquí hay una agenda rápida de lo que voy a hablar. Comenzando con un poco de trasfondo sobre el problema de rendimiento. Entonces, ¿por qué estamos hablando de concurrencia en primer lugar? Y luego hablaremos un poco sobre la concurrencia bajo el capó. Así que cómo React realmente es, cómo React logró la concurrencia. Veremos las principales API concurrentes que se introdujeron en React 18. Hablaré brevemente sobre algunos casos de uso y luego algunas desventajas porque todo viene con una desventaja. Muy bien. Así que si piensas en las aplicaciones que usas en tu día a día hoy, Instagram, Twitter, esas aplicaciones dependen de dar retroalimentación inmediata al usuario, ¿verdad? Cuando desplazo mi feed de Instagram, recibo retroalimentación inmediatamente. Y las aplicaciones que construimos hoy se han vuelto cada vez más complejas, ¿verdad? Comparado con hace muchos años. Así que hay más datos que estas aplicaciones tienen que manejar, lo que significa más renders, más computación. Y todo esto esencialmente significa que hay una mayor probabilidad de una carga aumentada en el rendimiento de estas aplicaciones. Así que esencialmente, aquí es donde entra la concurrencia. Es crucial optimizar para la capacidad de respuesta para asegurar que la experiencia del usuario en estas aplicaciones sea lo mejor posible.

Así que aquí. Y sobre el tema principal.

2. The What and How of Concurrency

Short description:

La concurrencia es la capacidad de gestionar múltiples tareas simultáneamente sin bloquear el hilo principal. React divide el proceso de renderizado en fases de renderizado y de commit. En la fase de renderizado, React compara el DOM existente con el DOM virtual, calcula la diferencia y determina los cambios necesarios. La fase de commit aplica estos cambios al DOM, permitiendo la interrupción de la fase de renderizado para priorizar las interacciones del usuario.

El qué y el cómo de la concurrencia. En pocas palabras, la concurrencia es la capacidad de gestionar múltiples tareas simultáneamente, como renderizar la interfaz de usuario, responder a la entrada del usuario, procesar solicitudes de red, y hacer todo esto sin bloquear o ralentizar el hilo principal. Así que echemos un vistazo al trasfondo de esto y cómo React realmente logra esto.

Imagen superior, sincrónica, imagen inferior, concurrente. Y el proceso de renderizado en React se divide en dos fases. Así que está la fase de renderizado, y está la fase de commit. Así que si miras la primera imagen, notarás que la fase de renderizado, que es donde React comparará el DOM existente con el DOM virtual, calculará la diferencia, y básicamente hará esta computación y determinará qué cambios necesitan hacerse. Y luego la fase de commit es donde React realmente aplicará estos cambios al DOM.

Así que si miras la primera imagen, es solo un bloque continuo largo de renderizado, ¿verdad? Y luego tenemos el commit, y luego tenemos estas tareas. Y lo que eso significa, típicamente, antes de React 18, es que la fase de renderizado no podía ser interrumpida. Así que cuando cargo un componente o una página, React tiene que completar esa fase de renderizado antes de que el usuario pueda realmente interactuar con la página web. Así que la fase de commit, como puedes ver, básicamente hace que este proceso sea interrumpible. Así que si miras la imagen inferior, notarás que esta fase de renderizado se divide en pequeños fragmentos y esencialmente, React ha creado algo bastante inteligente, donde en lugar de renderizar todo en un solo bloque, realmente puede interrumpir esta fase de renderizado y el usuario puede priorizar las interacciones del usuario entre la fase de renderizado.

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

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.
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.
Entendiendo la Arquitectura Fiber de React
React Advanced 2022React Advanced 2022
29 min
Entendiendo la Arquitectura Fiber de React
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
El Futuro de las Herramientas de Rendimiento
JSNation 2022JSNation 2022
21 min
El Futuro de las Herramientas de Rendimiento
Top Content
Today's Talk discusses the future of performance tooling, focusing on user-centric, actionable, and contextual approaches. The introduction highlights Adi Osmani's expertise in performance tools and his passion for DevTools features. The Talk explores the integration of user flows into DevTools and Lighthouse, enabling performance measurement and optimization. It also showcases the import/export feature for user flows and the collaboration potential with Lighthouse. The Talk further delves into the use of flows with other tools like web page test and Cypress, offering cross-browser testing capabilities. The actionable aspect emphasizes the importance of metrics like Interaction to Next Paint and Total Blocking Time, as well as the improvements in Lighthouse and performance debugging tools. Lastly, the Talk emphasizes the iterative nature of performance improvement and the user-centric, actionable, and contextual future of performance tooling.
How React Compiler Performs on Real Code
React Advanced 2024React Advanced 2024
31 min
How React Compiler Performs on Real Code
Top Content
I'm Nadia, a developer experienced in performance, re-renders, and React. The React team released the React compiler, which eliminates the need for memoization. The compiler optimizes code by automatically memoizing components, props, and hook dependencies. It shows promise in managing changing references and improving performance. Real app testing and synthetic examples have been used to evaluate its effectiveness. The impact on initial load performance is minimal, but further investigation is needed for interactions performance. The React query library simplifies data fetching and caching. The compiler has limitations and may not catch every re-render, especially with external libraries. Enabling the compiler can improve performance but manual memorization is still necessary for optimal results. There are risks of overreliance and messy code, but the compiler can be used file by file or folder by folder with thorough testing. Practice makes incredible cats. Thank you, Nadia!

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 WorkshopFree
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 🤐)
Aventuras de Renderizado Concurrente en React 18
React Advanced 2021React Advanced 2021
132 min
Aventuras de Renderizado Concurrente en React 18
Top Content
Featured WorkshopFree
Maurice de Beijer
Maurice de Beijer
Con el lanzamiento de React 18 finalmente obtenemos el tan esperado renderizado concurrente. Pero, ¿cómo va a afectar eso a tu aplicación? ¿Cuáles son los beneficios del renderizado concurrente en React? ¿Qué necesitas hacer para cambiar al renderizado concurrente cuando actualices a React 18? ¿Y qué pasa si no quieres o no puedes usar el renderizado concurrente todavía?

¡Hay algunos cambios de comportamiento de los que debes estar al tanto! En esta masterclass cubriremos todos esos temas y más.

Acompáñame con tu portátil en esta masterclass interactiva. Verás lo fácil que es cambiar al renderizado concurrente en tu aplicación React. Aprenderás todo sobre el renderizado concurrente, SuspenseList, la API startTransition y más.
Comenzando con Suspense y Renderizado Concurrente en React
React Summit 2020React Summit 2020
125 min
Comenzando con Suspense y Renderizado Concurrente en React
Featured Workshop
Maurice de Beijer
Maurice de Beijer
React sigue evolucionando y haciendo que las cosas difíciles sean más fáciles para el desarrollador promedio.
Un caso en el que React no era particularmente difícil pero muy repetitivo, es trabajar con solicitudes AJAX. Siempre hay una trinidad de estados de carga, éxito y posibles errores que deben manejarse cada vez. Pero ya no, ya que el componente `<Suspense />` facilita mucho la vida.
Otro caso es el rendimiento de aplicaciones más grandes y complejas. Por lo general, React es lo suficientemente rápido, pero con una aplicación grande, la renderización de componentes puede entrar en conflicto con las interacciones del usuario. El renderizado concurrente se encargará de esto, en su mayoría de forma automática.
Aprenderás todo sobre cómo usar <Suspense />, mostrar indicadores de carga y manejar errores. Verás lo fácil que es comenzar con el renderizado concurrente. Harás que el suspense sea aún más capaz combinándolo con el renderizado concurrente, el gancho `useTransition()` y el componente <SuspenseList />.
Construyendo aplicaciones web que iluminan Internet con QwikCity
JSNation 2023JSNation 2023
170 min
Construyendo aplicaciones web que iluminan Internet con QwikCity
Featured WorkshopFree
Miško Hevery
Miško Hevery
Construir aplicaciones web instantáneas a gran escala ha sido elusivo. Los sitios del mundo real necesitan seguimiento, análisis y interfaces y interacciones de usuario complejas. Siempre comenzamos con las mejores intenciones pero terminamos con un sitio menos que ideal.
QwikCity es un nuevo meta-framework que te permite construir aplicaciones a gran escala con un rendimiento de inicio constante. Veremos cómo construir una aplicación QwikCity y qué la hace única. El masterclass te mostrará cómo configurar un proyecto QwikCity. Cómo funciona el enrutamiento con el diseño. La aplicación de demostración obtendrá datos y los presentará al usuario en un formulario editable. Y finalmente, cómo se puede utilizar la autenticación. Todas las partes básicas para cualquier aplicación a gran escala.
En el camino, también veremos qué hace que Qwik sea único y cómo la capacidad de reanudación permite un rendimiento de inicio constante sin importar la complejidad de la aplicación.
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
Depuración del Rendimiento de React
React Advanced 2023React Advanced 2023
148 min
Depuración del Rendimiento de React
Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Veía una interacción lenta, probaba una optimización aleatoria, veía que no ayudaba, y seguía probando 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. Hacía una grabación en Chrome DevTools o React Profiler, la examinaba, intentaba hacer clic en cosas al azar, y luego la cerraba 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 cómo 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, cubriremos el rendimiento de interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)