0Pricing
React Academy · Lección

El problema de renderizar listas grandes

Comprenda por qué renderizar 10.000 nodos DOM hunde el rendimiento y cómo lo resuelve la virtualización.

El problema de renderizar listas grandes es una lección gratuita de React Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

Renderizar 10000 elementos li

Suponga que recorre un array de diez mil elementos y renderiza un li para cada uno. React creará diligentemente diez mil nodos del DOM, aunque en la pantalla solo quepan unas pocas docenas a la vez.

La mayoría de esos nodos están fuera de la pantalla y son invisibles, pero el navegador debe crearlos, calcular su diseño y mantenerlos todos.

Coste del diseño del navegador para árboles DOM grandes

Los árboles DOM grandes tienen un coste real para el navegador. El diseño, el recálculo de estilos y la memoria aumentan con el número de nodos, por lo que una lista enorme ralentiza el renderizado inicial e incrementa el uso de memoria.

Incluso las interacciones sencillas pueden entrecortarse cuando el motor tiene que controlar y volver a calcular el diseño de decenas de miles de nodos.

Degradación del rendimiento del desplazamiento

El desplazamiento por una lista enorme es donde los usuarios notan más el problema. El navegador vuelve a pintar y puede recalcular el diseño a medida que se mueve el contenido; con demasiados nodos, la velocidad de fotogramas cae por debajo de un nivel fluido.

El resultado es un desplazamiento entrecortado y lento que hace que la interfaz parezca que no responde, independientemente de lo rápida que sea el resto de la aplicación.

Medir el número de nodos en DevTools

Puede confirmar el problema en el panel Memory de las DevTools del navegador, que informa del número de nodos DOM de la página. Una lista que crea miles de nodos se muestra claramente allí.

Observar cómo aumenta esa cifra a medida que renderiza más elementos le proporciona pruebas concretas de que el tamaño del DOM es el cuello de botella.

El concepto de virtualización

La virtualización, a veces denominada windowing, renderiza únicamente los elementos visibles en ese momento y un pequeño búfer, en lugar de la lista completa. A medida que se desplaza, se montan los elementos que entran en la vista y se desmontan los que salen.

Así, el DOM activo se mantiene reducido independientemente del número de elementos que contengan los datos, separando el tamaño del DOM del tamaño del conjunto de datos.

Calcular la ventana visible

La ventana visible se obtiene a partir de la posición de desplazamiento, la altura del contenedor y la altura de los elementos. Al dividir la altura de la ventana gráfica entre la altura de un elemento se obtiene aproximadamente cuántas filas caben, y el desplazamiento indica cuáles son.

La biblioteca utiliza estos valores para decidir exactamente qué parte de los elementos debe renderizar en cada momento.

react-virtualized frente a react-window y TanStack Virtual

Varias bibliotecas implementan windowing. react-virtualized ofrece muchas funcionalidades, pero es más grande; react-window es una reescritura más pequeña y enfocada del mismo autor; y TanStack Virtual es una opción moderna sin interfaz incorporada.

Para la mayoría de las listas, react-window ofrece un equilibrio excelente entre sencillez y rendimiento, por lo que este curso se centra en ella.

Cuándo es necesaria la virtualización

La virtualización resulta útil cuando las listas son largas, aproximadamente de varios cientos de filas o más, o cuando las filas contienen muchas imágenes y componentes anidados. En esos casos, el tamaño del DOM afecta realmente al rendimiento.

Los feeds infinitos, las tablas de datos grandes y los historiales de chat son situaciones habituales en las que el windowing pasa de ser opcional a resultar esencial.

Cuándo no merece la pena

Para listas cortas de unas pocas docenas de elementos sencillos, la virtualización añade complejidad sin ofrecer un beneficio significativo. La sobrecarga del posicionamiento absoluto y de las mediciones incluso puede empeorar el rendimiento general.

Reserve el windowing para conjuntos de datos realmente grandes; para los pequeños, un map normal es más sencillo y suficientemente rápido.

La ventaja obtenida

Con el windowing, una lista de cien mil elementos mantiene en el DOM solo los pocos elementos visibles, por lo que el renderizado inicial es rápido, el uso de memoria se mantiene bajo y el desplazamiento es fluido.

A cambio de un poco de complejidad en la configuración, obtiene un rendimiento que ya no depende de la cantidad de datos, que es la promesa principal de la virtualización.

Comprobación rápida: cuándo usar virtualización

Decida cuándo merece la pena utilizar la virtualización.

Repaso: el problema de las listas grandes

Renderizar miles de nodos DOM incrementa el coste del diseño, el uso de memoria y los tirones durante el desplazamiento; puede confirmarlo mediante el recuento de nodos de DevTools. La virtualización renderiza únicamente la ventana visible y un búfer, manteniendo reducido el DOM.

react-window es una opción enfocada y ligera frente a react-virtualized y TanStack Virtual. Utilícela para listas grandes o pesadas y omítala en listas cortas y sencillas.

Preguntas frecuentes

¿La lección «El problema de renderizar listas grandes» es gratis?

Sí — el texto completo de «El problema de renderizar listas grandes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «El problema de renderizar listas grandes»?

Comprenda por qué renderizar 10.000 nodos DOM hunde el rendimiento y cómo lo resuelve la virtualización. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «El problema de renderizar listas grandes»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. El problema de renderizar listas grandes
  2. FixedSizeList: renderización de miles de elementos
  3. VariableSizeList: alturas de fila dinámicas
  4. Combinación de virtualización y obtención de datos
← Volver a React Academy