Antes de entrar en eso, sin embargo, quiero tocar rápidamente cómo llegamos a los componentes de servidor en primer lugar, cómo suspense se relaciona con todo eso solo para que todos estén en la misma página. Ahora, si miramos la historia del renderizado web, y la evolución del renderizado web en los últimos 15 a 20 años, muchos de nosotros probablemente aún recordaremos los días en que estábamos escribiendo HTML simple, y luego pasamos al servidor y creamos dinámicamente ese HTML con lenguajes como PHP.
Y eso tenía un gran inconveniente, que es, si haces mucho trabajo en el servidor, por ejemplo, para obtener datos de diferentes fuentes, ese tiempo de respuesta inicial del servidor puede volverse realmente lento. Y eso es obviamente muy malo para la experiencia del usuario. Así que cuando comenzamos a introducir JavaScript en nuestras aplicaciones para hacerlas más dinámicas, también introdujimos conceptos como AJAX, que nos permitieron, después de que la primera carga de la página ya está hecha, volver al servidor y obtener más cosas dinámicamente bajo demanda.
Y eso es bastante genial, porque significa que podemos descargar mucho de ese trabajo pesado al cliente y tener un tiempo de respuesta del servidor rápido, renderizar algún tipo de estado de carga, y luego hacer más trabajo. Y eso es tan conveniente que comenzamos a hacerlo más y más, hasta que finalmente nos acercamos a lo que ahora llamamos aplicaciones de una sola página. Y es entonces cuando todos los frameworks que conocemos y amamos como React, como Vue, como Angular comienzan a volverse realmente populares. Para obtener lo mejor de ambos mundos, sin embargo, luego reintroducimos rápidamente los conceptos de renderizado del lado del servidor y generación del lado estático en esos frameworks. Así que eso esencialmente trajo tres problemas principales todavía con él. Uno fue el tamaño del paquete. Así que desde las aplicaciones de una sola página, los tamaños de los paquetes de JavaScript siguieron creciendo y creciendo y se convirtieron en un problema. Con él, el segundo problema es el problema de la hidratación. Así que incluso si renderizas del lado del servidor tu aplicación de React, todavía necesita enviar todo ese JavaScript al cliente, y necesita ejecutar todo el JavaScript para hidratar toda la aplicación solo en caso de que algunas partes de tu aplicación usen lógica del lado del cliente, como estado, como efectos, como escuchadores de eventos, ese tipo de cosas. Y la hidratación es lenta. Así que la hidratación realmente comenzó a convertirse en uno de los principales cuellos de botella de rendimiento en las aplicaciones web modernas. El tercer problema es que estamos de vuelta en el servidor ahora. Así que nuevamente, tenemos el problema donde si el servidor hace mucho trabajo, y ese trabajo es lento, ese tiempo de respuesta inicial del servidor puede volverse realmente lento muy rápidamente.
Así que introducimos los componentes de servidor de React. Los componentes de servidor principalmente intentan hacer una cosa. Permite a los desarrolladores decirle al empaquetador qué componentes son estáticos y solo necesitan ser renderizados una vez, y cuáles son dinámicos y necesitan ser enviados al cliente y necesitan ser hidratados. Así que en una aplicación normal realista, esto puede realmente reducir masivamente la cantidad de JavaScript que necesitas enviar al cliente y la cantidad de hidratación que está ocurriendo. Así que eso es increíble, pero por sí solos, los componentes de servidor no hacen realmente nada sobre ese tercer problema. Así que ahí es donde entra suspense. Y para mostrar cómo suspense aborda ese problema, lo que vamos a hacer hoy es construir nuestra propia versión de suspense en el servidor desde cero. Y quiero ser muy claro aquí, esto no es cómo suspense está implementado en React. Esto es muy deliberadamente una versión muy simplificada, muy simplificada de ello. El punto principal aquí es solo mostrar cómo funciona conceptualmente, y también para mostrar cómo en las diferentes etapas mejora la experiencia. Así que comenzamos con lo que yo llamaría renderizado del lado del servidor clásico. Luego podemos ver cómo podemos mejorarlo introduciendo streaming, y luego cómo podemos mejorarlo aún más haciendo streaming fuera de orden, que es lo que suspense en el servidor nos permite hacer.
Comments