Turning It up to Eleven

Rate this content
Bookmark

Más a menudo de lo que parece, el rendimiento comienza con cómo se cargan los datos en tu aplicación. ¿Qué datos tienen dependencias? ¿Qué datos son críticos para la página? ¿Qué datos son variables? ¿Estáticos? ¿Personalizados? ¿Disponibles sin conexión? En esta charla, usaremos Remix para explorar cómo diferentes estrategias de carga de datos pueden mejorar la experiencia de tu usuario.

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

Bret Little
Bret Little
21 min
28 Oct, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Bienvenido a Turning It Up to 11 en React Advanced. Hydrogen, un marco de comercio electrónico construido sobre Remix, se centra en la carga eficiente de datos. Cargar datos en paralelo usando promise.all es cuatro veces más rápido que cargar de manera secuencial. Divide promise.all en dos al manejar dependencias de datos. Almacenar en caché datos estáticos puede mejorar significativamente el tiempo de carga de la página. Optimiza las páginas de productos reduciendo awaits y priorizando el contenido esencial. Usa límites de suspense y UI de esqueleto para una carga de datos óptima. Coloca solicitudes no bloqueantes antes de la solicitud de datos principal para un mejor rendimiento. Remix client cache maneja el almacenamiento en caché automáticamente. Considera las dependencias de datos y prioriza el contenido crítico.
Available in English: Turning It up to Eleven

1. Introduction to Turning It Up to 11

Short description:

Bienvenidos a Turning It Up to 11 en React Advanced. Soy Brett Little, un desarrollador en Shopify, trabajando en el equipo de Hydrogen. Hydrogen es un framework de comercio electrónico construido sobre Remix. La comunidad de desarrollo web a menudo se centra en debates sobre frameworks, pero la velocidad de tu aplicación está determinada por cómo cargas los datos. La obtención de datos en Remix se realiza a través de enrutamiento basado en archivos, lo que te permite hacer solicitudes asíncronas a APIs y renderizar los datos.

Bienvenidos a Turning It Up to 11 en React Advanced. Mi nombre es Brett Little, y estoy realmente emocionado de estar aquí hoy.

De nuevo, mi nombre es Brett. Vivo en Maine. Cultivo flores y trabajo en Shopify en el equipo de Hydrogen. Hydrogen es un framework sobre Remix donde añadimos todo tipo de opiniones específicas de comercio electrónico que te ayudan a comenzar a construir un sitio de comercio electrónico muy rápidamente en Remix.

Puedes seguirme en littlebrett en Twitter. Pero Turning It Up to 11, ¿qué quiero decir con Turning It Up to 11? Hay una película muy, muy antigua. Tal vez nunca hayas oído hablar de ella, pero aquí tenemos a estos dos viejos rockeros que están hablando sobre rockear en el escenario. Específicamente, hablan sobre cómo sus amplificadores llegan hasta 11, todos los números suben hasta 11. Pero uno de los chicos pregunta, bueno, ¿por qué subirlo hasta 11? ¿Por qué no simplemente hacer que 10 sea el número más alto y hacerlo más fuerte en lugar de tener este extra 11 en el dial? Lo cual es algo interesante. Es como este momento divertido de este tipo de juego con la escala de números. ¿Realmente importa? Bueno, siento que la comunidad de desarrollo web a veces es un poco así. Discutimos, hay todo tipo de drama sobre este framework versus aquel framework. Esto es mejor, eso es peor. Y todos se molestan mucho, y hay todo este tipo de drama. Pero estoy aquí para decir que tu aplicación no es lenta debido a tu framework. Usualmente tu aplicación es lenta por la forma en que estás cargando datos.

Entonces, cuando digo cargar datos, ¿a qué me refiero? Bueno, la mayoría de las aplicaciones muestran mucho en la página y obtener todos los datos para mostrar en la página lleva tiempo. Así que en este caso, tal vez sea una aplicación de comercio electrónico. Una aplicación de comercio electrónico podría tener toneladas de productos. Esos productos podrían tener reseñas. Podrían tener disponibilidad, imágenes de precios, y muchos de estos datos podrían provenir de diferentes servicios, a veces incluso servicios de terceros. Y tienes que juntar todo eso, ponerlo en la página para que puedas renderizar algo, y eso a veces lleva tiempo. Así que la obtención de datos en Remix específicamente. Hagamos un pequeño repaso. Si no estás familiarizado con Remix, Remix proporciona rutas, enrutamiento basado en archivos. Cada archivo para una ruta puede tener una función asíncrona exportada que es un cargador. Esa función asíncrona exportada que es un cargador se va a ejecutar para definir los datos para esta página. Así que dentro de aquí puedes hacer cualquier solicitud asíncrona a cualquier API, obtener algunos datos, devolverlos del cargador, y luego esa función de exportación por defecto, podemos extraer esos datos dentro y podemos renderizar algo.

2. Advanced Loader Techniques

Short description:

La mayoría de las aplicaciones son más complicadas que simplemente renderizar lo que está dentro de la aplicación. Cargar datos de manera secuencial, uno tras otro, puede ser cuatro veces más lento que cargar todo en paralelo usando promise.all. Tener más de un await en una función async indica una secuencia y puede necesitar ser reconsiderada para paralelización.

Lo que sea que se renderice aquí es lo que va a aparecer dentro de la aplicación. Pero estamos llevándolo al 11. Eso es bastante simple. La mayoría de las aplicaciones son mucho más complicadas que eso. Veo en el equipo de Hydrogen cientos de diferentes aplicaciones que están construidas que hacen algunas cosas increíbles dentro de sus loaders.

Así que consideremos lo que podría ser un poco más avanzado, lo que podría estar sucediendo. Así que dentro de nuestro loader, tal vez vamos a cargar algunos productos, luego tal vez vamos a cargar algunas reseñas, luego tal vez podríamos cargar recomendaciones. Y después de eso, también podríamos cargar el usuario que ha iniciado sesión para mostrar algo sobre quién ha iniciado sesión. Eso es genial. Este código realmente se ve muy, muy bien. Es realmente simple. Es fácil de entender. Carga esto, luego esto, luego esto. Se ve increíble.

Pero en realidad, hay un problema serio con este código. Específicamente, se llama lo que es una secuencia. Una secuencia es donde tenemos que cargar una cosa, y no es hasta que eso termina de cargar, que podemos proceder a cargar la siguiente cosa. Así que esencialmente, no estamos haciendo nada en paralelo. Estamos cargando uno, luego el otro, luego el otro, luego el otro. Así que esto es cuatro veces más lento de lo que necesita ser. Y la forma más fácil de resolver esto es simplemente envolver todo en promise.all.

Si envuelves todo en promise.all, ahora hay un await en la parte superior, y cargamos todo en paralelo, así que ahora la secuencia es plana. No hay ninguna espera en nada, y una vez que todo está hecho, podemos renderizar la UI. Pero si soy franco, esto no es tan intuitivo como esto. Como todo este asunto de promise.all, es un poco desafortunado JavaScript, siento que, los primitivos que tenemos, esto simplemente no se ve tan bien para muchos desarrolladores, y muchos desarrolladores, siento que, preferirían ver algo como esto.

Y la clave aquí, sin embargo, es que si alguna vez tienes más de un await en una función async no solo en Remix, solo en cualquier función async en JavaScript, si tienes más de un await, tienes una secuencia. Tal vez esa secuencia sea necesaria. Tal vez lo sea Pero si tienes más de un await, algo se está procesando, estás esperando que termine, y luego algo más se va a procesar después de eso. Así que si alguna vez ves más de un await en una sola función async, tal vez deberías considerar mirarlo, hablar sobre si es necesario, ¿podría ser paralelizado? Pero de nuevo, estamos llevándolo al 11, puede ser, no siempre es tan complicado. No siempre es tan fácil simplemente paralelizar todo en la función.

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

Todo Más Allá de la Gestión de Estado en Tiendas con Pinia
Vue.js London Live 2021Vue.js London Live 2021
34 min
Todo Más Allá de la Gestión de Estado en Tiendas con Pinia
Top Content
State management is not limited to complex applications and transitioning to a store offers significant benefits. Pinia is a centralized state management solution compatible with Vue 2 and Vue 3, providing advanced devtools support and extensibility with plugins. The core API of Pinia is similar to Vuex, but with a less verbose version of stores and powerful plugins. Pinia allows for easy state inspection, error handling, and testing. It is recommended to create one file per store for better organization and Pinia offers a more efficient performance compared to V-rex.
Uso efectivo de useEffect
React Advanced 2022React Advanced 2022
30 min
Uso efectivo de useEffect
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
React Query: ¡Es hora de romper con tu "Estado Global"!
React Summit Remote Edition 2020React Summit Remote Edition 2020
30 min
React Query: ¡Es hora de romper con tu "Estado Global"!
Top Content
Global state management and the challenges of placing server state in global state are discussed. React Query is introduced as a solution for handling asynchronous server state. The Talk demonstrates the process of extracting logic into custom hooks and fixing issues with state and fetching logic. Optimistic updates with mutation are showcased, along with the benefits of using React Query for data fetching and mutations. The future of global state management is discussed, along with user feedback on React Query. The Talk concludes with an invitation to explore React Query for server state management.
Los Átomos de Jotai Son Simplemente Funciones
React Day Berlin 2022React Day Berlin 2022
22 min
Los Átomos de Jotai Son Simplemente Funciones
Top Content
State management in React is a highly discussed topic with many libraries and solutions. Jotai is a new library based on atoms, which represent pieces of state. Atoms in Jotai are used to define state without holding values and can be used for global, semi-global, or local states. Jotai atoms are reusable definitions that are independent from React and can be used without React in an experimental library called Jotajsx.
Anunciando Starbeam: Reactividad Universal
JSNation 2022JSNation 2022
27 min
Anunciando Starbeam: Reactividad Universal
Starbeam is a library for building reactive user interfaces with JavaScript, similar to Svelte, Vue, and Ember. It provides a data structure and query feature for filtering and sorting. The useStarBeam function ensures JSX reconciliation only occurs when reactive dependencies change. Starbeam tracks every read and write operation to update the component accordingly. It can be used with React and other frameworks, and offers debugging tools and locale integration.
Pensando en React Query
React Summit 2023React Summit 2023
22 min
Pensando en React Query
Top Content
React Query is not a data fetching library, but an Asian state manager. It helps keep data up to date and manage agent life cycles efficiently. React Query provides fine-grained subscriptions and allows for adjusting stale time to control data fetching behavior. Defining stale time and managing dependencies are important aspects of working with React Query. Using the URL as a state manager and Zustand for managing filters in React Query can be powerful.

Workshops on related topic

Repensando el Estado del Servidor con React Query
React Summit 2020React Summit 2020
96 min
Repensando el Estado del Servidor con React Query
Top Content
Featured Workshop
Tanner Linsley
Tanner Linsley
La distinción entre el estado del servidor y el estado del cliente en nuestras aplicaciones puede ser un concepto nuevo para algunos, pero es muy importante entenderlo cuando se entrega una experiencia de usuario de primera calidad. El estado del servidor viene con problemas únicos que a menudo se cuelan en nuestras aplicaciones sorpresa como:
- Compartir datos entre aplicaciones- Caché y Persistencia- Deduplicación de Solicitudes- Actualizaciones en segundo plano- Gestión de Datos "Obsoletos"- Paginación y Recuperación Incremental- Memoria y Recolección de Basura- Actualizaciones Optimistas
Los gestores tradicionales de "Estado Global" pretenden que estos desafíos no existen y esto finalmente resulta en que los desarrolladores construyan sus propios intentos sobre la marcha para mitigarlos.
En esta masterclass, construiremos una aplicación que expone estos problemas, nos permite entenderlos mejor, y finalmente los convierte de desafíos a características usando una biblioteca diseñada para gestionar el estado del servidor llamada React Query.
Al final de la masterclass, tendrás una mejor comprensión del estado del servidor, el estado del cliente, la sincronización de datos asíncronos (un bocado, lo sé), y React Query.
Gestión del estado en React con Context y Hooks
React Summit Remote Edition 2021React Summit Remote Edition 2021
71 min
Gestión del estado en React con Context y Hooks
WorkshopFree
Roy Derks
Roy Derks
Mucho ha cambiado en el mundo de la gestión del estado en React en los últimos años. Donde Redux solía ser la principal biblioteca para esto, la introducción de las API de Contexto y Hooks de React ha revolucionado las cosas. Ya no necesitas bibliotecas externas para manejar tanto el estado del componente como el estado global en tus aplicaciones. En este masterclass aprenderás los diferentes enfoques para la gestión del estado en la era post-Redux de React, ¡todos basados en Hooks! Y como bonificación, exploraremos dos próximas bibliotecas de gestión del estado en el ecosistema de React.