Estrategias de Renderizado Web en React

By Endika Orube

Explorando las diferentes técnicas de renderizado para crear aplicaciones web modernas, optimizadas y con excelente experiencia de usuario.

Introducción

El renderizado web es el proceso técnico que transforma el código en interfaces visuales. Su correcta implementación es determinante para el éxito de cualquier aplicación moderna.

Una buena estrategia de renderizado impacta directamente en:

  • La experiencia de usuario (UX)
  • El posicionamiento en buscadores (SEO)
  • El rendimiento y la escalabilidad
  • Los costes de desarrollo y mantenimiento

La evolución en React: Desde su nacimiento en 2013, React transformó el desarrollo frontend con su enfoque declarativo y su Virtual DOM.

De SPAs a arquitecturas modernas: El viaje desde las Single Page Applications tradicionales hasta frameworks como Next.js, Remix y React Server Components representa una respuesta a las limitaciones del renderizado exclusivo en cliente.

En esta guía: Se analizan las diferentes estrategias disponibles, sus ventajas, desventajas y casos de uso óptimos para poder tomar decisiones informadas en cualquier proyecto.

Explorar estrategias

Client Side Rendering (CSR)

Contenido renderizado en cliente
Todo el renderizado ocurre en el cliente
  • Estrategia donde todo el proceso de renderizado ocurre en el navegador del cliente.
  • El servidor entrega un archivo HTML mínimo con enlaces a archivos JavaScript.
  • El navegador descarga, analiza y ejecuta estos scripts para construir la interfaz de usuario.
  • Después de la carga inicial, la navegación entre páginas no requiere nuevas solicitudes de HTML.
  • La aplicación maneja las transiciones de vista, solicitando solo los datos necesarios a través de APIs.
  • React utiliza este enfoque en sus implementaciones tradicionales de Single Page Applications (SPAs).
  • Librerías como React Query, SWR o TanStack Query optimizan el rendimiento mediante caché y gestión de estado.
  • Ideal para aplicaciones altamente interactivas con usuarios recurrentes.

Static Site Generation (SSG)

Build Time
CDN
Cliente
HTML pre-renderizado
Generado en build time, servido como estático
  • Estrategia donde las páginas HTML se generan por adelantado durante el proceso de compilación.
  • El framework ejecuta todo el código React en el servidor durante el build.
  • Se obtienen los datos necesarios y se generan archivos HTML estáticos para cada ruta.
  • Estos archivos pueden ser servidos desde un CDN, resultando en tiempos de carga extremadamente rápidos.
  • React "" el HTML estático conectándolo con JavaScript para añadir interactividad.
  • Ideal para sitios con contenido que no cambia frecuentemente como landing pages o documentación.
  • Ofrece el mejor rendimiento posible para el usuario final, con un coste de infraestructura mínimo.

Incremental Static Regeneration (ISR)

Servidor
CDN
Cliente
Contenido estático
Actualizado periódicamente
Estático con revalidación periódica
  • Evolución del SSG que permite regenerar páginas estáticas individuales en segundo plano.
  • Las páginas se generan estáticamente en el build inicial, como en SSG tradicional.
  • Se puede especificar un intervalo de revalidación para cada página o sección.
  • Cuando un usuario solicita la página, se muestra la versión estática mientras se regenera en segundo plano.
  • Es posible desencadenar revalidaciones bajo demanda a través de una API.
  • Combina la velocidad del contenido estático con la frescura del contenido actualizado periódicamente.
  • Ideal para sitios con contenido que cambia con frecuencia moderada como blogs, catálogos o noticias.

Server Side Rendering (SSR)

Base de datos
Servidor
Cliente
HTML generado por request
Renderizado en el servidor para cada petición
  • Estrategia donde el HTML se genera dinámicamente en el servidor para cada solicitud.
  • El servidor ejecuta los componentes React, obtiene los datos necesarios y genera HTML completo.
  • El usuario recibe contenido visible inmediatamente, antes de que se descargue el JavaScript.
  • A diferencia del SSG, el SSR genera el HTML en tiempo de ejecución, no durante el build.
  • Después de recibir el HTML inicial, el navegador descarga el JavaScript para "" la página.
  • Ideal para contenido que debe ser actualizado en cada solicitud o personalizado para cada usuario.
  • Proporciona un equilibrio entre velocidad de primera carga y capacidad de mostrar contenido dinámico.

SSR con Streaming

Servidor
Cliente
Streaming de HTML
Envío progresivo de HTML en trozos
  • Evolución del SSR tradicional que permite enviar partes del HTML progresivamente.
  • Aprovecha las capacidades de de HTTP para comenzar a enviar HTML tan pronto como esté disponible.
  • React renderiza primero el esqueleto de la página y lo envía inmediatamente al navegador.
  • Los componentes que dependen de datos más lentos se renderizan cuando están disponibles.
  • Se integra con React Suspense para declarar estados de carga para diferentes partes de la UI.
  • Mejora significativamente métricas como y LCP, especialmente en conexiones lentas.
  • Ideal para páginas complejas con múltiples fuentes de datos de diferentes velocidades.

Partial Pre-rendering (PPR)

Servidor
Estático + Dinámico
Cliente
Estático (Shell)
Dinámico (Datos)
Combina partes estáticas y dinámicas en una misma página
  • Estrategia innovadora que combina renderizado estático y dinámico en una misma página.
  • Permite pre-renderizar estáticamente partes de una página durante el build, dejando "agujeros" para contenido dinámico.
  • El shell de la página (layouts, navegación, elementos comunes) se pre-renderiza durante el build.
  • Las partes dinámicas (contenido personalizado, datos en tiempo real) se renderizan en el servidor en tiempo de ejecución.
  • Ofrece una solución equilibrada entre rendimiento y dinamismo.
  • Ideal para aplicaciones con elementos estáticos compartidos y secciones de contenido personalizado.
  • Todavía como experimental feature en Next.js

Comparativa de Estrategias

Análisis comparativo de las diferentes estrategias de renderizado

Estrategia / Métrica
Client Side Rendering (CSR)
Static Site Generation (SSG)
Incremental Static Regeneration (ISR)
Server Side Rendering (SSR)
SSR con Streaming
Partial Pre-rendering (PPR)
SEO
Pobre
Excelente
Excelente
Excelente
Excelente
Excelente
Tiempo de carga inicial
Lento
Rápido
Rápido
Medio
Rápido
Rápido
Carga en servidor
Baja
Solo en build
Media
Alta
Media
Media
Contenido dinámico
Excelente
Limitado
Bueno
Excelente
Excelente
Excelente
Complejidad
Baja
Baja
Media
Media
Alta
Alta
Hidratación
No aplica
Selectiva con RSC
Selectiva con RSC
Selectiva con RSC
Progresiva y selectiva con RSC
Óptima con RSC (Shell + islas dinámicas)

React Server Components (RSC)

Servidor
Cliente
Server Components
Client Components
División explícita entre componentes de servidor y cliente
  • Paradigma de arquitectura que divide explícitamente los componentes entre servidor y cliente, no es una estrategia de renderizado por sí misma.
  • Los Server Components se ejecutan exclusivamente en el servidor y su código nunca se envía al cliente como JavaScript.
  • Pueden acceder directamente a recursos del backend (bases de datos, sistemas de archivos, APIs internas) de forma segura.
  • Los Client Components, marcados con la directiva 'use client', se renderizan inicialmente en el servidor pero también se envían al cliente.
  • La hidratación solo es necesaria para los Client Components, mientras que los Server Components no requieren este proceso.
  • Esta arquitectura reduce drásticamente el JavaScript enviado al navegador, mejorando los tiempos de carga e interactividad.
  • Se combina con estrategias como SSR, SSG o Streaming para optimizar diferentes aspectos de la experiencia de usuario.
  • Permite una clara separación de responsabilidades: lógica de negocio en el servidor, interactividad en el cliente.
  • Ideal para aplicaciones que requieren acceso directo a datos del backend manteniendo una experiencia de usuario fluida.

Conclusiones

Reflexiones finales sobre las estrategias de renderizado

  • Cada estrategia tiene un uso ideal según el tipo de aplicación y contenido.

  • Para sitios con contenido mayormente estático (blogs, documentación), SSG es la opción óptima.

  • Para aplicaciones con datos personalizados y actualizaciones frecuentes, SSR con streaming ofrece el mejor equilibrio.

  • Las aplicaciones tipo dashboard o admin pueden beneficiarse de CSR con librerías de gestión de estado modernas.

  • PPR es ideal para sitios con una combinación de contenido estático y dinámico, como tiendas online o plataformas de contenido.

  • El enfoque híbrido es la norma: diferentes estrategias coexistiendo en la misma aplicación según la página o componente.

  • React Server Components representa el futuro para optimizaciones de tamaño de bundle y separación de responsabilidades.

Debatamos

Si no, ¿dónde está la gracia?

  • ¿Es toda esta complejidad realmente necesaria?

  • Hiperoptimización vs personalización