Saltar al contenido

Lección 15 de 17 · Lectura y práctica

Implementación de streaming y optimización

Tipo de lección: VideoConcepto claveEl streaming SSR en Next.js 15 es una técnica que permite enviar partes de una página web al navegador a medida que se generan en el servidor, en lugar de esperar a que toda la página esté.

Del concepto a la práctica

Taller de esta lección

La optimización final debe coordinar dos decisiones: reducir trabajo interactivo innecesario y aislar datos lentos. En una ficha de producto editorial, el título y el resumen pueden ser Server Components; las reseñas y el contador de reacciones pueden quedar en límites separados si no tienen la misma latencia.

Ejemplo resuelto

tsx
<Suspense fallback={<p>Cargando reseñas</p>}><Reviews slug="rutas-claras" /></Suspense>
<Suspense fallback={<p>Cargando reacciones</p>}><Reactions slug="rutas-claras" /></Suspense>

Dos fallbacks permiten que una sección terminada no quede retenida por la otra.

Pruébalo

  1. Renderiza primero título y resumen.

  2. Coloca reseñas y reacciones en límites distintos.

  3. Simula 100 ms para reseñas y 250 ms para reacciones.

  4. Anota qué texto aparece en cada intervalo.

Comprueba tu resultado

Error frecuente: usar un único límite para ambas consultas y perder independencia. Corrígelo separando cada bloque. Resultado esperado: el resumen aparece primero; alrededor de 100 ms se reemplaza el fallback de reseñas y alrededor de 250 ms el de reacciones, bajo las mismas condiciones locales.

Fragmento dentro de una página completa

El snippet anterior asume imports y componentes definidos. En una página servidor importa Suspense; define Reviews y Reactions como funciones async que esperan 100 y 250 ms respectivamente y devuelven marcado del mismo slug; devuelve main con título, resumen y los dos límites. Marca la ruta dinámica para la práctica de solicitud. Los tiempos son esperas nominales, no intervalos visuales garantizados. En una entrega real revisa accesibilidad de los estados de carga y evita anunciar repetidamente cambios irrelevantes.

Servidor que produce HTML y navegador que lo muestra y gestiona la interacción; claves sensibles permanecen en el servidor.
CursaloMapa de práctica
Dónde se ejecuta cada parte

El servidor puede obtener datos y producir el HTML inicial. El navegador muestra el resultado y ejecuta las interacciones que necesitan estado local. Mantén las claves sensibles en el servidor y define qué parte se ejecuta en cada entorno.

Ver la infografía en tamaño completo ↗
Fuentes para profundizar

Tipo de lección: Video

Concepto clave

El streaming SSR en Next.js 15 es una técnica que permite enviar partes de una página web al navegador a medida que se generan en el servidor, en lugar de esperar a que toda la página esté lista. Imagina que estás en un restaurante: en lugar de esperar a que todos los platos de tu mesa estén listos para servirte, el camarero te trae la ensalada primero, luego la sopa, y finalmente el plato principal. Cada componente se stream (transmite) cuando está listo, mejorando la percepción de velocidad para el usuario.

Esto se combina con Server Components, que se renderizan exclusivamente en el servidor, reduciendo el código JavaScript que se envía al cliente. Juntos, permiten construir aplicaciones que se sienten rápidas incluso con datos lentos o complejos. La clave está en dividir la página en chunks (fragmentos) independientes que pueden cargarse progresivamente.

Cómo funciona en la práctica

En Next.js 15, implementas streaming usando Suspense para envolver componentes que cargan datos de forma asíncrona. Por ejemplo, en un dashboard con múltiples secciones, puedes hacer que cada sección se stream de manera independiente.

Paso a paso:

  1. Crea un componente de servidor que use async/await para fetch de datos.
  2. Envuelve ese componente en un <Suspense fallback={...}> para mostrar un estado de carga.
  3. Next.js automáticamente stream el contenido cuando los datos estén disponibles, mostrando el fallback mientras tanto.

Ejemplo básico:

// app/dashboard/page.tsx
export default function Dashboard() {
  return (
    <div>
      <h1>Dashboard</h1>
      <Suspense fallback={<p>Cargando ventas...</p>}>
        <SalesChart />
      </Suspense>
      <Suspense fallback={<p>Cargando usuarios...</p>}>
        <UserList />
      </Suspense>
    </div>
  );
}

// app/dashboard/sales-chart.tsx
export default async function SalesChart() {
  const sales = await fetchSalesData(); // Datos lentos
  return <Chart data={sales} />;
}

Caso de estudio

Vamos a optimizar una página de e-commerce que muestra productos, reseñas y recomendaciones. Sin streaming, el usuario espera 3 segundos a que todo cargue. Con streaming, mostramos progresivamente:

ComponenteTiempo de cargaAcción del usuario
Encabezado y filtros0.5sPuede interactuar inmediatamente
Lista de productos1.5sVe productos y hace scroll
Reseñas2.5sLee reseñas mientras productos cargan
Recomendaciones3.0sRecibe sugerencias personalizadas

Implementación en código:

// app/productos/[id]/page.tsx
export default function ProductPage({ params }) {
  return (
    <>
      <ProductHeader productId={params.id} />
      <Suspense fallback={<ProductSkeleton />}>
        <ProductDetails productId={params.id} />
      </Suspense>
      <Suspense fallback={<ReviewsSkeleton />}>
        <ProductReviews productId={params.id} />
      </Suspense>
    <>
  );
}
El streaming puede mejorar el Largest Contentful Paint (LCP) hasta en un 40% en aplicaciones con múltiples fuentes de datos.

Errores comunes

  • Anidar Suspense innecesariamente: Envolver cada elemento pequeño en Suspense crea overhead. Agrupa componentes lógicos juntos.
  • Olvidar fallbacks útiles: Usar fallback={null} hace que la página parezca rota. Siempre provee un indicador de carga.
  • Streaming sin caché: Si los datos no se cachean, cada stream puede hacer llamadas repetidas a la API. Usa fetch con next: { revalidate: 60 }.
  • Ignorar el orden de stream: Componentes críticos (como encabezados) deben stream primero. Prioriza con loading.js o Suspense estratégico.
  • No probar en red lenta: Usa DevTools para simular 3G y ver cómo se comporta el streaming.

Checklist de dominio

  1. Puedo explicar la diferencia entre SSR tradicional y streaming SSR.
  2. He implementado Suspense para al menos 2 componentes asíncronos en un proyecto.
  3. Sé cómo medir el impacto del streaming en Core Web Vitals.
  4. Puedo identificar cuándo usar Server Components vs Client Components en streaming.
  5. He configurado caché para datos en componentes que usan streaming.
  6. Puedo debuggear problemas de hidratación con streaming.
  7. Sé optimizar el orden de stream para mejor experiencia de usuario.

Optimiza una página de blog con streaming SSR

En este ejercicio, mejorarás una página de blog que actualmente carga todo de una vez, causando una espera larga. Implementarás streaming para cargar contenido progresivamente.

  1. Prepara el entorno: Crea un nuevo proyecto Next.js 15 o usa uno existente. Asegúrate de tener una página de blog con al menos tres secciones: encabezado, lista de artículos, y sidebar con categorías.
  2. Identifica componentes lentos: Simula datos lentos en lista de artículos y sidebar usando await new Promise(resolve => setTimeout(resolve, 2000)) en funciones async.
  3. Implementa Suspense: Envuelve cada componente lento en un <Suspense> con un fallback apropiado (ej: skeleton loader).
  4. Prioriza el stream: Asegúrate de que el encabezado se muestre primero, luego la lista de artículos, y finalmente el sidebar.
  5. Prueba y mide: Usa las DevTools de Chrome para simular una red lenta (3G) y verifica que los componentes se stream en el orden correcto. Revisa el LCP en Lighthouse.
Pistas
  • Usa el componente loading.js de Next.js para el fallback global si es necesario.
  • Considera agrupar el sidebar en un Suspense separado para que no bloquee la lista de artículos.
  • Para datos simulados, crea funciones async que devuelvan arrays de objetos con titulos y contenido.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.

Sigue con Next.js 15: Aplicaciones Full-Stack con Server Components y Streaming SSR

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.