Contenido del curso
Haciendo tu proyecto más rápido
Consumiendo datos de manera eficiente
Escalabilidad y personalización
- 10

Internacionalización en Next.js sin librerías
11:18 min - 11

Internacionalización en Next.js con Traducciones Dinámicas
14:47 min - 12

Autenticación con middleware en Next.js
08:35 min - 13

Autenticación con cookies en Next.js
15:40 min - 14

LaunchDarkly en Next.js sin caché estático
20:50 min - 15

Manejo de errores con useActionState en Next.js
14:34 min - 16

Cómo integrar Sentry en Next.js
12:46 min
Características Adicionales y Herramientas
- 17

use cache en Next.js 15
17:27 min - 18

Seguridad en Server Actions y variables de entorno
08:35 min - 19

Seguridad de Cookies y Encriptación en Aplicaciones Next.js
16:12 min - 20

Optimización de Rendimiento en Next.js: Técnicas y Herramientas
17:16 min - 21

Despliegue de Aplicaciones Next.js con Vercel y Docker
06:25 min - 22

Desplegando Next.js en Fly.io con Docker
20:29 min - 23

Despliegue de Aplicaciones Next.js con Flyo y Docker
10:59 min - 24

Cómo Next.js redujo el FCP de 4.2 a 1.2s
01:58 min
Streaming con Suspense en Next.js
Resumen
Cuando trabajas con React Server Components y Server Actions, cargar datos desde el servidor se siente mágico, pero esa magia tiene un costo. Si tu página depende de muchas consultas asíncronas, el navegador queda esperando hasta que el servidor resuelva todo antes de pintar algo. Aquí es donde Suspense en Next.js y el streaming rendering cambian las reglas del juego para que tus usuarios vean contenido más rápido.
¿Por qué Suspense importa cuando usas Server Components?
Dan Abramov, uno de los grandes contribuidores de React, anticipó que Suspense iba a transformar la forma de construir interfaces. Con la llegada de los Server Components, esa promesa se hizo evidente: Suspense es la pieza que le da pistas a React y a Next.js sobre qué partes de tu UI pueden esperar y cuáles deben mostrarse ya.
En la práctica, sin Suspense el HTML llega al navegador en un solo bloque. Si abres la pestaña Network, vas a ver que el servidor retiene la respuesta hasta resolver todo. Eso significa pantalla en blanco para tu usuario mientras tu base de datos hace su trabajo.
¿Qué es streaming rendering en Next.js? Es la capacidad del servidor de enviar el HTML por partes. Renderiza primero lo que ya tiene listo y va completando el resto a medida que los datos llegan, sin que el navegador tenga que esperar todo el bundle.
¿Cómo implementar Suspense alrededor de un componente lento?
En la página de detalle de autores ubicada en app/bookmarks/[username]/page, hay dos segmentos: uno trae la información del autor y otro depende de una consulta más lenta. La solución clásica sería montar el segundo componente en el cliente, pero eso te saca del flujo del servidor y agrega complejidad innecesaria.
Con Suspense te quedas en el servidor y dejas que React resuelva el orden de entrega. El patrón se ve así:
tsx import { Suspense } from 'react' import Loading from './loading'
export default function Page() { return ( <> <AuthorInfo /> <Suspense fallback={<Loading />}> <SlowComponent /> </Suspense> </> ) }
Al recargar y revisar el HTML de la respuesta, vas a notar que el primer bloque llega con la info del autor y un marcador que dice cargando. Cuando el segundo request termina, el servidor completa el stream y reemplaza el fallback por el contenido real. Si el servidor es muy rápido, puede entregar todo junto, así que el comportamiento se adapta al tiempo real de respuesta.
¿Cuándo conviene envolver con Suspense?
Usa Suspense cuando tengas segmentos asíncronos que tarden más que el resto de la página. Algunos escenarios típicos:
- Componentes que dependen de consultas a bases de datos pesadas.
- Bloques que hacen fetch a APIs externas con latencia variable.
- Secciones que ejecutan validaciones o lógica de negocio extensa antes de renderizar.
¿Cómo funciona el archivo loading.tsx en Next.js?
Next.js tiene un nombre de archivo reservado: loading.tsx (o loading.jsx si usas JavaScript). Cuando creas este archivo dentro de una carpeta de ruta, Next.js envuelve automáticamente toda la página en un Suspense y muestra ese componente como fallback mientras la página resuelve sus datos.
La estructura mínima es:
tsx export default function Loading() { return <Spinner /> }
Con ese archivo en su lugar, al recargar la ruta vas a ver el spinner o skeleton sin tener que importar Suspense manualmente. Es azúcar sintáctica de Next.js sobre el mismo mecanismo de React.
¿loading.tsx reemplaza a Suspense? No.
loading.tsxaplica Suspense a nivel de página completa. Suspense manual te da control granular para suspender solo ciertos componentes dentro de la página.
¿Puedes reutilizar el componente loading dentro de un Suspense?
Sí, y es buena práctica. Como loading.tsx exporta un componente normal, puedes importarlo en tu página y pasarlo como fallback de un Suspense específico. Así mantienes consistencia visual entre la carga global de la ruta y las cargas parciales de bloques internos.
tsx import Loading from './loading'
<Suspense fallback={<Loading />}> <SlowComponent /> </Suspense>
Habilidades y conceptos clave que aparecen en la clase
La clase recorre varias ideas que vale la pena ubicar con su momento exacto en el video.
- Suspense como componente de React para declarar fronteras de carga asíncrona [1:18].
- Streaming rendering, el proceso por el cual el servidor envía HTML por partes [3:24].
- Preloading y estrategias avanzadas previas que ayudan a Next.js a anticipar datos [2:08].
- Fallback en Suspense, el contenido que se muestra mientras los hijos resuelven [2:48].
- loading.tsx como archivo reservado de Next.js para Suspense a nivel de ruta [3:58].
- Hidratación, mencionada al ignorar un warning de Turbopack y CSS [3:08].
- Chakra UI como librería de componentes desde donde se importa el spinner [4:32].
Medir el performance es la única forma de decidir dónde aplicar Suspense. No todas las páginas lo necesitan y llenar tu app de spinners o skeletons termina degradando la experiencia. Sé intencional: identifica las rutas con datos pesados, mide tiempos reales y aplica Suspense donde el usuario realmente lo agradezca.
¿En qué parte de tu app crees que un Suspense bien colocado haría la mayor diferencia? Cuéntame en los comentarios.