Lección 12 de 17 · Lectura y práctica
Quiz: Rendimiento y optimización con SSR
Tipo de lección: QuizConcepto 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
Optimizar con SSR no consiste en declarar que una página es rápida; consiste en relacionar cada espera con el contenido que bloquea. Si una cabecera tarda 20 ms y una recomendación 300 ms, el límite de carga debe evitar que la recomendación bloquee la cabecera. La medición debe conservar condiciones comparables.
Ejemplo resuelto
Datos locales: cabecera 20 ms, artículo 40 ms, recomendaciones 300 ms. Suponiendo que las tres consultas comienzan en paralelo, sin separación el primer contenido depende de 300 ms. Con Suspense para recomendaciones, el contenido principal puede terminar tras 40 ms y la sección secundaria después de 300 ms. Son tiempos del escenario, no una promesa general.
Pruébalo
Escribe los tres tiempos en una tabla.
Identifica qué bloque puede esperar.
Define un fallback para recomendaciones.
Repite la observación con los mismos datos.
Comprueba tu resultado
Error frecuente: sumar porcentajes inventados para anunciar una mejora. Corrígelo comparando solo los tiempos observados. Resultado esperado: bloqueo inicial sin separación = 300 ms; contenido principal separado = 40 ms; recomendaciones terminan en 300 ms. No confundas “contenido visible” con “página completa”.
Hipótesis de la comparación
El máximo de 20, 40 y 300 es 300 solo si las consultas empiezan juntas y se espera a todas; ejecutarlas secuencialmente daría 360 ms, antes de otros costes. Con independencia, el título puede estar listo en 20 y el artículo en 40, mientras las recomendaciones terminan en 300. No derives FCP, LCP, TTFB ni un porcentaje comercial de estos temporizadores. Una medición necesita misma compilación, datos, red, caché y entorno, varias muestras y tiempos del navegador.

Mapa de prácticaEl 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 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. Esto mejora la percepción de velocidad para el usuario, ya que puede empezar a interactuar con la página antes de que esté completamente cargada.
Este enfoque es especialmente útil para páginas con secciones que dependen de datos lentos, como consultas a APIs externas o bases de datos. En Next.js 15, se implementa usando Suspense junto con componentes de servidor, lo que permite definir límites de carga para diferentes partes de la interfaz. La clave está en dividir la página en chunks independientes que se pueden transmitir y renderizar progresivamente.
Cómo funciona en la práctica
Para implementar Streaming SSR en Next.js 15, sigue estos pasos en un componente de servidor:
- Envuelve las secciones de tu página que dependen de datos asíncronos en un componente
<Suspense>. - Dentro de
<Suspense>, usaawaitpara cargar los datos, y define unfallbackque se muestre mientras se carga. - Next.js enviará primero el HTML estático y el fallback, luego transmitirá los chunks de datos a medida que estén disponibles.
Ejemplo básico:
export default async function Page() {
return (
<div>
<h1>Dashboard</h1>
<Suspense fallback={<p>Cargando datos lentos...</p>}>
<SlowDataSection />
</Suspense>
<FastSection />
</div>
);
}
async function SlowDataSection() {
const data = await fetchSlowData(); // Llamada lenta
return <p>Datos: {data}</p>;
}
function FastSection() {
return <p>Esta sección se carga rápido.</p>;
}Caso de estudio
Considera una aplicación de e-commerce con una página de producto que incluye: título, precio, galería de imágenes, reseñas de usuarios, y productos recomendados. Las reseñas y recomendaciones dependen de APIs externas que pueden tardar hasta 2 segundos en responder.
| Sección | Tipo de dato | Tiempo estimado de carga | Estrategia con Streaming SSR |
|---|---|---|---|
| Título y precio | Estático | 0 ms | Enviado inmediatamente |
| Galería de imágenes | Assets locales | 100 ms | Enviado con el chunk inicial |
| Reseñas de usuarios | API externa lenta | 2000 ms | Envuelta en Suspense con fallback |
| Productos recomendados | API externa lenta | 1500 ms | Envuelta en Suspense separado |
Al usar Streaming SSR, el usuario ve el título, precio y galería casi al instante, mientras que las reseñas y recomendaciones se cargan progresivamente. Esto reduce el First Contentful Paint y mejora la experiencia, especialmente en conexiones lentas.
En pruebas reales, Streaming SSR puede reducir el tiempo percibido de carga en un 40-60% para páginas con datos asíncronos.
Errores comunes
- No usar fallbacks adecuados: Si omites el prop
fallbacken<Suspense>, el usuario puede ver un espacio en blanco. Siempre proporciona un indicador de carga simple, como un spinner o texto. - Anidar demasiados componentes Suspense: Esto puede fragmentar excesivamente la página y aumentar la complejidad. Agrupa secciones relacionadas en un solo Suspense cuando sea posible.
- Ignorar el manejo de errores: Los datos asíncronos pueden fallar. Usa try-catch o componentes de error boundaries para evitar que un error en un chunk afecte toda la página.
- No optimizar el orden de los chunks: Prioriza los chunks críticos para la interacción del usuario (como botones o formularios) enviándolos primero.
- Usar Streaming SSR para todo: No es necesario para páginas completamente estáticas o con datos muy rápidos; evalúa el costo-beneficio basado en métricas de rendimiento.
Checklist de dominio
- Entiendo cómo Streaming SSR difiere del SSR tradicional en términos de flujo de datos.
- Puedo implementar un componente de servidor con Suspense para cargar datos asíncronos.
- Sé diseñar fallbacks efectivos que mejoren la experiencia de usuario durante la carga.
- Puedo medir el impacto de Streaming SSR usando herramientas como Lighthouse o Web Vitals.
- Reconozco cuándo usar Streaming SSR vs. otras técnicas como Static Generation o Client-side Fetching.
- Sé estructurar una página para minimizar el número de chunks sin sacrificar el rendimiento.
- Puedo solucionar problemas comunes, como chunks que no se transmiten o fallbacks que no se muestran.
Optimiza una página de blog con Streaming SSR
En este ejercicio, mejorarás el rendimiento de una página de blog en Next.js 15 usando Streaming SSR. La página actual carga todos los datos (artículo, comentarios, autor) de manera sincrónica, lo que causa una espera larga.
- Crea un nuevo componente de servidor llamado
BlogPageque represente un artículo de blog. - Divide la página en tres secciones: contenido del artículo (carga rápida), comentarios (carga lenta desde una API simulada), e información del autor (carga media).
- Envuelve la sección de comentarios en un
<Suspense>con un fallback que muestre'Cargando comentarios...'. - Simula una API lenta para comentarios usando
await new Promise(resolve => setTimeout(resolve, 2000))para retrasar 2 segundos. - Prueba la página y verifica que el contenido del artículo se muestre inmediatamente, mientras los comentarios se cargan progresivamente.
Pistas
- Usa funciones async en componentes de servidor para cargar datos.
- Asegúrate de que el fallback en Suspense sea un elemento React válido, como un
o
. - Puedes usar console.log para depurar el orden de carga de los chunks.
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.