Quiz: Rendimiento y optimización con SSR

Quiz
10 min~5 min lectura

Quiz Interactivo

Pon a prueba tus conocimientos

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:

  1. Envuelve las secciones de tu página que dependen de datos asíncronos en un componente <Suspense>.
  2. Dentro de <Suspense>, usa await para cargar los datos, y define un fallback que se muestre mientras se carga.
  3. 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ónTipo de datoTiempo estimado de cargaEstrategia con Streaming SSR
Título y precioEstático0 msEnviado inmediatamente
Galería de imágenesAssets locales100 msEnviado con el chunk inicial
Reseñas de usuariosAPI externa lenta2000 msEnvuelta en Suspense con fallback
Productos recomendadosAPI externa lenta1500 msEnvuelta 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 fallback en <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

  1. Entiendo cómo Streaming SSR difiere del SSR tradicional en términos de flujo de datos.
  2. Puedo implementar un componente de servidor con Suspense para cargar datos asíncronos.
  3. Sé diseñar fallbacks efectivos que mejoren la experiencia de usuario durante la carga.
  4. Puedo medir el impacto de Streaming SSR usando herramientas como Lighthouse o Web Vitals.
  5. Reconozco cuándo usar Streaming SSR vs. otras técnicas como Static Generation o Client-side Fetching.
  6. Sé estructurar una página para minimizar el número de chunks sin sacrificar el rendimiento.
  7. 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.

  1. Crea un nuevo componente de servidor llamado BlogPage que represente un artículo de blog.
  2. 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).
  3. Envuelve la sección de comentarios en un <Suspense> con un fallback que muestre 'Cargando comentarios...'.
  4. Simula una API lenta para comentarios usando await new Promise(resolve => setTimeout(resolve, 2000)) para retrasar 2 segundos.
  5. 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.