Saltar al contenido

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

Quiz: Evaluación del proyecto integrador

Tipo de lección: QuizConcepto claveEl Streaming SSR en Next.js 15 permite renderizar componentes de servidor de forma progresiva, enviando partes de la interfaz al cliente a medida que se completan, en lugar de esperar a que toda.

Del concepto a la práctica

Taller de esta lección

Este cierre evalúa decisiones conectadas, no memoria aislada. Una solución sólida identifica qué ruta lee datos, qué acción muta, qué componente necesita interacción y qué espera puede aislarse. También distingue una prueba reproducible de una afirmación general sobre rendimiento.

Ejemplo resuelto

Escenario: detalle de artículo con título inmediato, reseñas lentas y formulario de nueva revisión. Respuesta: detalle y título en servidor; reseñas detrás de Suspense; formulario cliente solo si necesita estado visual; mutación en Server Action con validación. La prueba debe incluir título válido, texto vacío y slug inexistente.

Pruébalo

  1. Dibuja las cuatro responsabilidades.

  2. Asigna una prueba a cada responsabilidad.

  3. Escribe el resultado esperado antes de ejecutar.

  4. Compara observación y expectativa.

Comprueba tu resultado

Error frecuente: convertir todo el detalle en cliente porque contiene un formulario. Corrígelo aislando el formulario. Resultado esperado: la lectura del artículo sigue resolviéndose en servidor, las reseñas muestran su fallback independiente y la acción rechaza texto vacío o slug desconocido sin modificar los datos.

Criterio para aprobar el integrador

Para cada prueba guarda entrada, sesión de prueba, registro antes/después y resultado visible. El array local del CRUD no cumple el requisito de persistencia del integrador: reemplázalo por un almacén duradero antes de aprobar. Una entrada válida crea una revisión y una denegada conserva exactamente la lista. Las reseñas y reacciones tienen fallbacks independientes, pero documenta la observación real sin asegurar milisegundos de pantalla por temporizadores del servidor.

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: Quiz

Concepto clave

El Streaming SSR en Next.js 15 permite renderizar componentes de servidor de forma progresiva, enviando partes de la interfaz al cliente a medida que se completan, en lugar de esperar a que toda la página esté lista. Imagina un restaurante que te sirve la entrada mientras cocina el plato principal, en lugar de hacerte esperar todo el menú completo.

Los Server Components se ejecutan exclusivamente en el servidor, reduciendo el bundle de JavaScript que se envía al cliente. Esto es crucial para aplicaciones que dependen de datos dinámicos o requieren acceso a recursos del servidor. Piensa en ellos como chefs que preparan la comida en la cocina (servidor) antes de servirla, en lugar de darle los ingredientes crudos al cliente para que cocine.

Cómo funciona en la práctica

Para implementar Streaming SSR, se utiliza la función loading.tsx o Suspense para envolver componentes que cargan datos de forma asíncrona. Por ejemplo, en una página de productos, puedes mostrar un esqueleto de carga mientras se obtienen los datos de la base de datos.

// app/products/page.tsx
export default async function ProductsPage() {
  const products = await fetchProducts(); // Llamada a API o base de datos
  return (
    

Productos

}>
); }

Este enfoque mejora el Time to First Byte y la percepción de rendimiento para el usuario, especialmente en conexiones lentas.

Caso de estudio

Considera una aplicación de e-commerce construida con Next.js 15. La página de inicio muestra:

  • Un carrusel de productos destacados (carga inmediata con datos estáticos)
  • Una lista de productos recomendados (carga asíncrona desde una API externa)
  • Un widget de ofertas especiales (datos en tiempo real desde WebSockets)

Usando Server Components, el carrusel se renderiza en el servidor sin JavaScript adicional. Para los productos recomendados, se emplea Streaming SSR con Suspense para mostrar un esqueleto mientras se obtienen los datos. El widget de ofertas puede ser un Client Component que se hidrata después de la carga inicial.

En pruebas reales, esta arquitectura redujo el LCP (Largest Contentful Paint) en un 40% comparado con una implementación tradicional de React.

Errores comunes

  • No usar Suspense para componentes asíncronos: Esto bloquea el renderizado hasta que todos los datos estén disponibles, perdiendo los beneficios del streaming. Solución: Envuelve siempre las llamadas asíncronas en Suspense con un fallback apropiado.
  • Mezclar lógica de cliente en Server Components: Usar hooks como useState o useEffect en un Server Component causará errores. Solución: Mueve la lógica interactiva a Client Components separados.
  • Olvidar manejar estados de carga y error: El streaming puede exponer estados intermedios. Solución: Implementa fallbacks visuales y manejo de errores con try-catch en las funciones asíncronas.
  • Sobrecargar el servidor con muchas solicitudes paralelas: Lanzar múltiples fetch simultáneos sin control puede degradar el rendimiento. Solución: Usa Promise.all con cuidado o implementa caché con revalidate.

Checklist de dominio

  1. Puedo explicar la diferencia entre Server Components y Client Components en una oración.
  2. He implementado al menos una página que usa Suspense para streaming de datos asíncronos.
  3. Sé cómo estructurar una aplicación para separar componentes de servidor y cliente eficientemente.
  4. Puedo medir el impacto del streaming en métricas de Core Web Vitals.
  5. He solucionado al menos un error común relacionado con Server Actions o Server Components.
  6. Puedo optimizar el rendimiento usando generateStaticParams para rutas dinámicas.
  7. Sé cómo implementar revalidación de datos (revalidate) para mantener la información actualizada.

Optimiza una página de blog con Streaming SSR y Server Components

En este ejercicio, mejorarás una página de blog existente para usar las características avanzadas de Next.js 15. Sigue estos pasos:

  1. Analiza la estructura actual: Revisa el archivo app/blog/[slug]/page.tsx que actualmente carga todos los datos de forma síncrona antes de renderizar.
  2. Identifica componentes candidatos: Separa el contenido en:
    • Encabezado del post (datos estáticos)
    • Cuerpo del post (carga asíncrona desde CMS)
    • Comentarios (carga asíncrona desde API externa)
    • Sidebar con posts relacionados (datos en tiempo real)
  3. Implementa Streaming SSR: Usa Suspense para envolver los componentes asíncronos (cuerpo y comentarios) con esqueletos de carga.
  4. Convierte a Server Components: Asegúrate de que los componentes que no necesitan interactividad del cliente sean Server Components.
  5. Agrega manejo de errores: Implementa try-catch para las llamadas asíncronas y muestra mensajes amigables al usuario.
  6. Prueba el rendimiento: Usa las herramientas de desarrollo de Next.js para comparar métricas antes y después.
Pistas
  • Recuerda que los Server Components no pueden usar hooks de React como useState
  • Puedes usar loading.tsx como alternativa a Suspense para páginas completas
  • Considera usar generateStaticParams para pre-renderizar slugs populares

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.