Server-Side Rendering y Frameworks que te ayudan: Nuxt, Next.js, Angular Universal, SvelteKit y Astro

17 de septiembre de 2024

En este post de vuelta de vacaciones, voy a intentar explicar una práctica en el desarrollo web bastante popular: el renderizado del lado del servidor.

Esta práctica tiene gran aceptación porque resuelve varios problemas a los que nos enfrentamos con las aplicaciones web modernas, y muchas empresas eligen SSR para:

Estos puntos tienen un factor común: el tiempo de carga de la página.

La necesidad del SSR (Server-Side Rendering)

Uno de los problemas de las aplicaciones SPA (Single Page Application) es el tiempo que tiene que esperar un usuario para ver el contenido final de una página/aplicación web. Las aplicaciones SPA comienzan con una página HTML en blanco y luego JavaScript inyecta el contenido dinámicamente hasta que la página está completa.

Aunque este enfoque es bueno porque evita recargar la página en cada navegación, también tiene inconvenientes. Principalmente, la carga puede ser lenta, ya que las aplicaciones SPA suelen incluir archivos JavaScript de gran tamaño. Esto implica que tienes que esperar a que se descargue todo el JavaScript del servidor y luego a que se ejecute para que la página se muestre correctamente.

Esto resulta en los siguientes problemas:

  1. Problemas de rendimiento y SEO: Primero, problemas como lentitud en la carga de la página o retrasos en la interactividad, que afecta a la experiencia de usuario, y también impactan al SEO, porque el contenido puede no estar disponible en el momento en que los motores de búsqueda lo indexan. Google penaliza estos retrasos utilizando sus odiosas métricas Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS) y First Contentful Paint (FCP).

  2. Problemas de accesibilidad: Al igual que con el SEO, la carga dinámica del contenido puede dificultar la navegación para tecnologías asistivas, y las actualizaciones de contenido no siempre se informan al usuario, alguien que utiliza un lector de pantalla podría no saber que ha habido un cambio.

Con SSR, el servidor genera el HTML necesario para la primera carga y una vez generado lo sirve al navegador, que lo "hidrata" con datos. Como el navegador recibe el HTML final directamente, se elimina la espera para solicitar el JavaScript y generar el contenido. Esto mejora el SEO y la accesibilidad, ya que el contenido está disponible de inmediato y es más fácil de indexar para los motores de búsqueda.

No hay que confundir SSR (Server-Side Rendering) con SSG (Static Site Generation). Con SSG, el HTML generado es estático y no cambia después de la generación; con SSR, el HTML servido al navegador es reactivo, así que estas aplicaciones combinan lo mejor de los dos mundos: ofrecen la inmediatez del estado inicial de una página SSG porque se recibe el HTML listo del servidor, y a la vez mantienen la reactividad de una SPA.

Principales problemas del SSR y cómo pueden los frameworks solucionarlos

Aunque el SSR ofrece muchas ventajas, también tiene ciertos inconvenientes y es importante tenerlos en cuenta cuando se está trabajando con este tipo de aplicaciones:

Diferencias entre entornos de ejecución

El uso de JavaScript tanto en el servidor como en el navegador puede generar confusión. APIs específicas del navegador, como "document" o "window", no están disponibles en el servidor, lo que complica la gestión de recursos. Los frameworks dedicados proporcionan herramientas que abstraen las diferencias entre entornos, y facilitan la ejecución de código tanto en el servidor como en el navegador.

Mayor carga en el servidor

El SSR puede aumentar la carga del servidor, ya que cada vista HTML requiere una solicitud nueva. Para optimizar el rendimiento, se utilizan mecanismos como almacenamiento en caché y regeneración incremental de contenido estático, lo que reduce presión sobre el servidor.

Sincronización del estado entre el servidor y el cliente

Mantener la consistencia del estado entre los dos entornos puede ser complicado, especialmente en aplicaciones con datos dinámicos. Los frameworks dedicados permiten gestionar y sincronizar datos de forma eficiente.

Depuración en un entorno SSR

Por último, gestionar aplicaciones en un entorno SSR significa recibir errores del servidor y del cliente, y a veces no sabes muy bien de que lado viene el problema. En este caso, los frameworks proporcionan herramientas de depuración y entornos de desarrollo que simplifican la identificación y resolución de problemas.

Frameworks populares

Actualmente existen muchos frameworks y herramientas para ayudarnos con todo esto, nos facilitan el trabajo y también mejoran el rendimiento y la experiencia general de la aplicación.

Entre los más populares se encuentran:

Nuxt

nuxt.com

Es un framework basado en Vue que da soporte para SSR y SSG, simplifica el desarrollo con Vue y añade nuevas funcionalidades como rutas automáticas basadas en nombres de carpetas, middleware, entre otras.

En la versión más reciente, Nuxt 3 viene con:

Next.js

nextjs.org

Al igual que Nuxt, es un framework que soporta SSR y SSG, pero está basado en React. Tiene herramientas para mejorar el rendimiento, como el ISR (Incremental Static Regeneration), que permite regenerar páginas estáticas de manera incremental. Next.js también ofrece herramientas para optimizar la experiencia del usuario, como la carga diferida de componentes y una API de enrutamiento robusta.

En su versión, Next.js 14, tenemos las siguientes novedades:

SvelteKit

kit.svelte.dev

SvelteKit es otro framework que soporta SSR y SSG, diseñado para aplicaciones Svelte. También cuenta con herramientas que mejoran la generación del contenido dinámico y el rendimiento en el servidor:

Angular Universal

github de Angular Universal

Angular Universal no es un framework, sino un conjunto de herramientas para Angular que nos ayuda a desarrollar SSR y SSG y mejorar el rendimiento de las aplicaciones Angular.

En la última versión nos han dado las siguientes mejoras:

Astro

astro.build

A diferencia de los demás, no está basado en un framework específico, sino que se integra con tecnologías como React, Vue o Svelte (Angular se queda fuera :-( ). Astro solo carga lo que se necesita y optimiza el rendimiento con SSR.

Como ventajas tiene:


El renderizado del lado del servidor es una técnica muy útil para mejorar el rendimiento y la accesibilidad de nuestras aplicaciones web, especialmente con aplicaciones SPA, y aunque tiene sus retos, los frameworks lo hacen mucho más manejable. Si estás pensando en implementar SSR, échale un ojo a estos frameworks que hemos visto, eligiendo bien te puede ahorrar mucho trabajo y dolores de cabeza.

Sobre el autor: Lorena Marchán

Desarrolladora Frontend amante del código y del pixel perfect, siempre lista para aprender y mejorar.

Comments
Únete a nosotros