Estrategias de Renderización Eficientes para Sitios Web
En el mundo del desarrollo web, existen diferentes formas de construir un sitio web o una aplicación web. Con la introducción de JavaScript (en 1996), las posibilidades de HTML se expandieron. Poco después, quedó claro que se necesitaba algo más que las limitadas características de HTML, que solo proporcionaba elementos que actuaban exclusivamente en el texto y su estilo, pero no permitía la interactividad dentro de la página.
Una decisión clave que se debe tomar al construir un sitio web es si usar la renderización en el lado del cliente, la renderización en el lado del servidor o la generación de sitios estáticos.
En este artículo, compararemos y contrastaremos estos tres enfoques diferentes para que puedas tomar una decisión informada sobre cuál es el adecuado para tu próximo proyecto.
Empecemos con algo de contexto
La web ha recorrido un largo camino desde sus humildes comienzos. En sus primeros días, las páginas web eran estáticas y el contenido se limitaba a texto simple, estilos e imágenes.
Con el tiempo, la tecnología evolucionó y las páginas web se volvieron más interactivas, con la aparación de Ajax y posteriormente WebSockets. En aquel entonces las páginas web podían generarse no solo en el lado del servidor, sino también en el lado del cliente, lo que hacía posible crear aplicaciones complejas que podían actualizarse en tiempo real.
Hoy en día, nos enfrentamos a problemas más complejos, ya que los usuarios esperan una experiencia única y de alto rendimiento. Esto ha llevado a que las tecnologías asociadas a la web se reinventen constantemente, dando lugar no solo a potentes tecnologías web, sino también a paradigmas de procesamiento más complejos.
Cuando un usuario accede a una página web, no solo está descargando archivos HTML, sino también trozos de código que proporcionan interactividad a ese HTML. Al final, todo será código HTML, pero esa transformación de código a HTML se conoce como renderización.
Actualmente existen diferentes formas de renderizar un sitio web y cada una de ellas tiene sus ventajas y desventajas. Los métodos de renderización actualmente utilizados son la Renderización en el Lado del Cliente (Client-Side Rendering - CSR) y la Renderización en el Lado del Servidor (Server-Side Rendering - SSR), que ocurren cuando el usuario accede al sitio web, y la Generación de Sitios Estáticos (Static Site Generation - SSG), que ocurre cuando el sitio web se implementa.
Vamos a desglosar y analizar cada uno de ellos para comprender cuáles son las ventajas y desventajas de cada uno de estos métodos.
Renderización en el Lado del Servidor (SSR)
En este caso, la SSR es el proceso de renderizar HTML dinámico en el servidor. Este método de renderización es el más antiguo de todos y se utilizaba en los años 90 y principios de los años 2000.
Con la SSR, el usuario hace una solicitud al servidor y el servidor procesa el código bajo demanda, entregando la página web al navegador del usuario. Hay que tener en cuenta que el servidor sirve la página bajo demanda cada vez, por lo que el navegador está constantemente haciendo solicitudes al servidor para cada nueva página y cada solicitud.
La principal ventaja de la SSR es que puede mejorar el rendimiento de tu aplicación porque el navegador no tiene que esperar a que se descargue y ejecute JavaScript antes de comenzar a renderizar la página.
Otra gran ventaja de la SSR es que mejora el SEO, ya que los motores de búsqueda pueden indexar fácilmente el contenido renderizado en el servidor. La principal desventaja de la SSR es que funciona mal cuando se necesita interactividad debido a la necesidad de solicitar siempre cada trozo de HTML al servidor. Además, la SSR a veces puede resultar en páginas "vacías" si el servidor es lento.
Generación de Sitios Estáticos (Static Site Generation - SSG)
La generación de sitios estáticos es un tipo de renderización en el lado del servidor que no es dinámica y tiene el código HTML generado previamente en el servidor. Esto significa que todo el trabajo se realiza por adelantado antes de que el usuario visite tu sitio.
Existen varios beneficios en el uso de la generación de sitios estáticos. En primer lugar, es mucho más rápido que la renderización en el lado del cliente o en el lado del servidor porque los archivos HTML ya están construidos y listos para usar. En segundo lugar, es más seguro porque no hay código dinámico que pueda ser explotado por hackers. Por último, es más fácil de escalar, ya que puedes confiar en una CDN y no necesitas preocuparte por la capacidad del servidor cuando aumenta el tráfico.
La desventaja de la generación de sitios estáticos es que si tienes una página grande, puede ser más difícil de configurar y administrar que otros métodos de renderización. Además, si necesitas actualizar tu contenido con frecuencia, deberás reconstruir y volver a implementar todo tu sitio web cada vez.
Renderización en el Lado del Cliente (Client Side Rendering - CSR)
La renderización en el lado del cliente se popularizó en los últimos años con los frameworks de JavaScript, que permitieron la creación de experiencias ricas e interactivas. JavaScript se utiliza para cargar el contenido de las páginas web. En lugar de cargar HTML desde la web, se carga de manera dinámica a través de JavaScript, lo que las hace más receptivas.
En este tipo de renderización, el cliente es responsable de procesar todo el código de JavaScript, por lo que la primera carga será costosa en términos de rendimiento. Esto resultará en tiempos de espera para el usuario y páginas que parecen cargar lentamente la primera vez que se acceden. Además, afecta a los robots de búsqueda de motores de búsqueda, ya que ralentiza su rastreo en el sitio web.
Por otro lado, este tipo de renderización no necesita un servidor especial o complejo. En este caso, la única función del servidor es proporcionar el código a los clientes. Como podemos ver, esta técnica de renderización transfiere toda la responsabilidad de procesar la página web al cliente.
La renderización en el lado del cliente se utiliza en sitios web altamente interactivos como Google Maps o Trello.
Enfoques híbridos
Actualmente, existen enfoques que utilizan ambas técnicas en conjunto para obtener lo mejor de ambos mundos. Esto resulta en un rendimiento SEO y de interactividad óptimo. En este caso, eres tú quien tiene una palanca y debes evaluar cuándo usar cada enfoque para obtener la mejor experiencia para tu sitio web.
La aparición de frameworks que combinan estos enfoques híbridos es ahora una realidad. Next.js, Remix, Nuxt o SvelteKit son buenos ejemplos de esto y son herramientas perfectas para obtener lo mejor de ambas técnicas. Estos frameworks hacen que el uso de enfoques híbridos sea muy fluido y te permiten ajustar las estrategias de renderización según las necesidades de tu sitio web.
Cuándo usar cada uno de ellos
Cuando debes decidir entre usar la renderización en el lado del cliente o en el lado del servidor, hay algunos factores clave a considerar. Estos incluyen la cantidad de tráfico que es probable que reciba el sitio, la relevancia del SEO y la necesidad de actualizaciones en tiempo real.
Para niveles de tráfico elevados o cuando el SEO es importante, la renderización en el lado del servidor puede ser la mejor opción, ya que puede reducir la cantidad de tiempo necesaria para cargar las páginas. Sin embargo, este enfoque requiere más recursos y puede ser más costoso de configurar y mantener.
La renderización en el lado del cliente puede ser una buena opción si el contenido es altamente interactivo. Puede ser menos costoso de mantener. Sin embargo, es importante tener en cuenta que este enfoque puede dar como resultado resultados de SEO más pobres.
Los enfoques híbridos son una buena opción para el SEO y la interactividad. En este caso, eres tú quien debe decidir y evaluar cuándo usar cada enfoque para obtener la mejor experiencia para tu sitio web.
Miembro fundador de The Crafters Lab
Àlvar es desarrollador de software y miembro fundador de The Crafters Lab.