¿React sin JavaScript?

Rate this content
Bookmark

Si React se ejecuta en un servidor y no hay nadie alrededor para verlo, ¿aún hace algún sonido? En esta charla, Fred explora el mundo de las optimizaciones del lado del servidor: ¿qué es posible hoy y qué nos depara el futuro? Con una vista previa de un emocionante nuevo proyecto nunca antes visto del equipo de Snowpack para ayudarte a construir sitios más rápidos con React!

26 min
14 May, 2021

Video Summary and Transcription

Esta es una charla sobre el lenguaje del desarrollo web y cómo influye en lo que podemos construir. Presenta Astro, un método para construir sitios web más rápidos con menos JavaScript en el lado del cliente. Astro combina el poder de JavaScript y la velocidad de HTML. Explica cómo mezclar scripts y marcado utilizando un script de frontmatter. Astro te permite usar componentes de React en una aplicación de Astro, generando marcado en el lado del servidor. Ofrece interactividad opcional con JavaScript y una salida HTML en primer lugar.

Available in English

1. El lenguaje del desarrollo web

Short description:

Esta es una charla sobre el lenguaje del desarrollo web y cómo influye en lo que podemos construir. Se presenta un ejemplo de una charla en una conferencia de Pete Hunt, uno de los creadores de React, donde introduce React y sus conceptos a una audiencia que no está familiarizada con ellos.

Hola. Mi nombre es Fred Schott, y esta es mi charla, Astro, React sin JavaScript. Esta es una charla sobre lenguaje. Y no me refiero a JavaScript versus PHP versus C++ versus Fortran. Lo que quiero decir es el lenguaje de la mente. Y realmente, el lenguaje de cómo hablamos sobre el desarrollo web, y cómo pensamos sobre el desarrollo web, y cómo eso influye en lo que podemos construir como desarrolladores web. Sabes, lo que se considera fácil versus lo que se considera difícil. Lo que es sencillo versus lo que es muy difícil. Lo que es posible y lo que es imposible. Todo proviene del lenguaje que hablamos sobre el desarrollo web. Y para darte un ejemplo, de lo que estoy hablando, quiero mostrar una charla en una conferencia que realmente me encanta. Esta es probablemente mi charla favorita de los últimos 20 años. Además, obviamente la infame charla de qué, si no la has visto, es una delicia. Definitivamente te recomiendo que la busques rápidamente en Google cuando termine la conferencia. Pero de lo que quiero hablar es de esta charla. Este es Pete Hunt, uno de los creadores de React, hablando sobre React. Y realmente lanzando React.

Ahora, lo que necesitas saber sobre esta charla es que tuvo lugar en 2013. Y esta es básicamente la primera vez que todos ven React. Y por lo tanto, las ideas que se presentan aquí, ya sabes, en 2020, son ideas de componentes y ciclos de renderizado y cómo pensamos sobre el desarrollo Front End. Todo suena exactamente a lo que hemos llegado a entender como buenas mejores prácticas. Pero, para esta audiencia, estos conceptos son muy extraños. Esta no es una audiencia que piensa en componentes y JSX. Esta es una audiencia que tradicionalmente solo ha pensado en términos de MVC. Eso es Modelo Vista Controlador. Si tuviste la suerte de haber evitado esta parte del desarrollo web, te ahorraré los detalles. No te perdiste mucho de nada. Pero MVC era esta idea de separar tu código y separar tus preocupaciones de tal manera que aportara claridad y limpieza a tu base de código. Separar tus preocupaciones era el objetivo aquí. Y así, cuando Facebook lanzó Componentes, era básicamente esta idea de, ya sabes,

2. Introducción desafiante de React

Short description:

La introducción de React por parte de Facebook fue recibida con escepticismo, ya que desafió las mejores prácticas establecidas en el desarrollo web, especialmente la arquitectura MVC. Muchos se preguntaron por qué Facebook pensaba que podían desafiar el statu quo y desviarse del enfoque ampliamente aceptado. La respuesta general fue que el enfoque de React para el desarrollo web no se alineaba con el pensamiento de la industria en ese momento.

MVC no es la respuesta. Estás separando estas cosas, pero te has acoplado de muchas maneras diferentes. Los componentes son una idea mucho mejor. Esa fue la propuesta de React. Y eso fue recibido con lo que generalmente llamaría sarcasmo. Sarcasmo, creo, es la definición técnica de cómo fue recibido. Porque, sabes, creo que este tweet puede decirlo mejor de lo que yo podría. El pensamiento general era que Facebook estaba desechando las mejores prácticas establecidas. Y, sabes, ¿quién eran ellos para hacer eso, verdad? MVC es lo mejor que jamás será. ¿Quién se cree Facebook desafiando el statu quo? Y para ser justos, estoy agregando mucho énfasis que realmente no está presente en este tweet. En cuanto a los comentarios en Twitter, esto es bastante educado y directo. Pero la respuesta general fue, sabes, esto no es cómo pensamos sobre el desarrollo web. ¿De qué estás hablando? Y así, lo que Pete hace en esta charla, que es como su segunda oportunidad de presentar React

3. Desafiando el Lenguaje de los Sitios Web

Short description:

Esta charla presenta una nueva forma de pensar en los sitios web y desafía el lenguaje utilizado para describirlos. Introduce Astro, un método para construir sitios web más rápidos con menos JavaScript en el lado del cliente.

al mundo, él comienza a replantearlo un poco. Empieza a decir, no, no, no. React es solo como MVC, es la vista de MVC. Bueno, a veces es el controlador y a veces es el modelo, pero realmente es solo la vista. Incluso recuerdo pensar, como, oh, es la vista. Es la vista. Vale. Genial. Aunque decir que es las tres cosas es exactamente lo que él está diciendo. El modelo no tiene sentido. Pete, incluso funciona con tu pila de tecnología. Funciona con backbone, y los desarrolladores en la audiencia dicen, ¡sí! ¡Backbone! ¡Una tecnología que seguiremos usando para siempre! Por lo tanto, esta charla es muy representativa de su época. Es alguien pensando en el desarrollo web de la forma en que lo pensamos hoy. Casi viajando en el tiempo hasta 2013 para tratar de explicarlo utilizando un lenguaje y una arquitectura que hoy vemos como obsoletos. Y así, esta charla que voy a dar hoy, quiero hacer algo similar. Quiero, y, ya sabes, diré que hemos visto algunas charlas geniales de otros frameworks web hoy. Todos proyectos increíbles, Next.js, Gatsby, Remix, Blitz, Redwood, ya sabes, esta ha sido una conferencia llena de diferentes formas de construir tu sitio. Todos proyectos geniales. Cosas fantásticas. Pero estamos terminando la conferencia, estamos llegando al final, así que quiero lanzarles a todos una bola curva. Quiero desafiarlos un poco. Quiero presentar una forma de construir sitios web que realmente desafía la forma en que pensamos sobre los sitios web. Quiero desafiar el lenguaje que usamos para describir lo que es un sitio web hoy en 2020. Y no soy Pete Hunt. Esto no es React. Tengo un poco más de orgullo o humildad que para decir eso. Pero esta es una nueva forma de pensar en los sitios web, y estamos muy emocionados por lo que desbloquea. Voy a tomar prestado un poco de Pete Hunt. Dale cinco minutos, y creo que te va a gustar lo que hemos estado trabajando. Esta charla es una presentación sobre Astro, que es una forma de construir sitios web más rápidos con menos

4. Astro: Desarrollo web más rápido y fácil

Short description:

Astro es un componente de React renderizado en el servidor que es más rápido y fácil de usar que los métodos tradicionales. Simplifica el proceso de construcción de sitios web mediante el uso de archivos Astro, que son un superconjunto de HTML. Con Astro, puedes crear sitios de carga rápida que superan a los frameworks con puntuaciones perfectas. El objetivo es ser tan rápido que no se pueda medir. Esta charla destaca la importancia de HTML en el desarrollo web.

JavaScript en el lado del cliente. Y todos dicen que son rápidos. Todos dicen que son eficientes. Todas palabras de moda. Si estás buscando algo un poco más llamativo, Astro es un componente de React renderizado en el servidor, pero mejor. ¿Capté tu atención ahora?

Y es posible que estés pensando, ¿de qué estás hablando? El equipo de React ha estado trabajando en componentes de React renderizados en el servidor durante años. Es increíblemente difícil. Suspense, modo concurrente, todas estas cosas se están uniendo, pero es un gran desafío. ¿De qué estás hablando que has descubierto esto? Y esto es exactamente de lo que estoy hablando sobre el lenguaje. En ciertas formas de pensar, es muy difícil. Con Astro, es muy fácil.

Antes de entrar en la demostración, quiero mostrarte un pequeño fragmento rápido. Astro se trata de construir tu sitio con archivos Astro. Esencialmente, es un superconjunto de HTML. Esto también es válido en Astro. Es similar a cómo JSX es paraJavaScript. Astro es para HTML. Pero esta es la base de cada sitio. Así que puedes ver este tipo de páginas index.Astro, que es esencialmente la página de inicio de tu sitio web que estás construyendo. Es HTML básico como base. Y si conoces HTML o incluso si conoces JSX, entonces ya conoces Astro. Y para construir la página de inicio de Astro, Astro.build, esencialmente junté algunas páginas estáticas, HTML, agregué un SVG y lo medí. Y obtuve un sitio tan rápido, tan rápido que no se podía medir en Lighthouse. Así que todos estos frameworks con sus puntuaciones perfectas de 100 y todo en verde, ya no es genial. Lo que descubrí que es realmente genial, son los ceros. Sé tan rápido que no se pueda medir. Ese es el nuevo objetivo. El desafío está planteado. Pero eso es lo que quiero transmitir aquí un poco. Es esta idea de HTML.

5. Astro vs. Aplicaciones JavaScript

Short description:

Astro compara las aplicaciones JavaScript con los sitios web HTML. Las aplicaciones JavaScript, como Next.js, Gatsby, Blitz y Redwood, ofrecen potencia y control con la carga de datos, la obtención de datos y el enrutamiento. Sin embargo, son complejas y requieren optimización para el rendimiento. Los sitios web HTML, como Eleventy y Hugo, son tradicionalmente de menor potencia y se centran en el contenido. Agregar interactividad a los sitios web HTML a menudo requiere configurar herramientas adicionales.

Y realmente la idea de cómo Astro se compara con otros frameworks que existen hoy en día. Y la forma en que lo enmarcaría es aplicaciones JavaScript vs. sitios web HTML. Las aplicaciones JavaScript son lo que estás construyendo con la mayoría de los frameworks que existen hoy en día. Eso es Next.js, Gatsby, Blitz, Redwood. Todos ellos se tratan de construir tu sitio como una aplicación JavaScript. Y hay muchas buenas razones para hacer esto.

Las aplicaciones JavaScript son potentes. Son muy expresivas. Puedes cargar datos, obtener datos, hacer enrutamiento. Y todas estas diferentes formas de construir un sitio en un lenguaje realmente agradable para el poder y el control. Pero son complejas. Next.js y todos estos frameworks existen básicamente para darte diferentes ganchos para hacer que tu sitio sea más rápido que el modelo tradicional de enviar una aplicación completa al usuario, que es el modelo tradicional de SBA. Entonces, puedes construir una aplicación JavaScript y enviarla al usuario. Podrías usar algo como Next que la renderizará en un servidor. Se trata de optimizar esa historia porque el rendimiento puede ser un desafío. Cuando construyes una gran aplicación y ahora quieres enviarla al usuario en tal vez un dispositivo de menor potencia o una conexión a Internet más débil, eso puede ser realmente desafiante de hacer correctamente, por eso las optimizaciones como SSR, SSG, son realmente importantes en el mundo de las aplicaciones JavaScript. Y podrías decir, sabes, si piensas que la distinción no tiene mucho sentido, eso es casi a lo que me refiero aquí, es que hoy en día somos tan sinónimos de aplicaciones JavaScript y sitios web como la misma cosa. Y hay buenas razones para eso. Si piensas en lo que es un sitio web HTML, probablemente sea algo de menor potencia. Eleventy o Hugo, se centran realmente en el contenido, markdown, generación estática de HTML, es una idea bastante de menor potencia o al menos tradicionalmente lo ha sido. Lo que terminan teniendo que hacer es decir, sí, JavaScript es esta otra cosa a la que no tocamos. Somos HTML. Si quieres agregar React, hazlo tú mismo. Así que el sitio web de Snowpax, uno de los proyectos en los que trabajo, lo construimos con Eleventy. Es genial. Es rápido, pero en el momento en que necesitas interactividad, tienes que configurar tu propia cosa.

6. Astro: Combinando el Poder de JavaScript y la Velocidad de HTML

Short description:

Astro combina el poder de JavaScript y la velocidad de HTML. Te permite construir sitios web rápidos con un mínimo de JavaScript. Astro es una combinación de la historia de rendimiento de 11ty y el poder de Next.js. Proporciona un entorno de desarrollo sin problemas y un sistema de enrutamiento basado en archivos.

para el cual tenemos un complemento de Snowpack. Es genial. Aporta un flujo de desarrollo moderno a un sitio HTML estático, pero definitivamente se siente que has juntado dos herramientas. No es el entorno de desarrollo sin problemas que te daría un Next.js. Pero esa idea de hacer que sea difícil agregar JavaScript es algo así como el regalo y la maldición de algo como Eleventy. Cuando lanzamos el sitio de documentación de Snowpack, la nueva reconstrucción en diciembre, recibí algo que me alegró todo el mes, un mensaje de Alex Russell diciendo que hice un buen trabajo con el rendimiento. Ahora, si conoces a Alex Russell en Twitter, esto es algo inaudito. Es una estrella fugaz el 4 de mayo. Ni siquiera sé qué significa eso. Esto fue grande y me puso muy feliz. Mientras preparo esta charla, veo que, bueno, no dijo que fuera tan bueno. Lo dijo bastante rápido. Por Alex, lo aceptaré. Eso es un elogio bastante alto. Lo interesante es que continuó diciendo cómo lo hiciste. Obviamente, el rendimiento, es muy bueno ver a las personas tratando el rendimiento tan seriamente. Nos sorprendió un poco porque realmente no nos importaba el rendimiento. No es que faltáramos al respeto a nuestros usuarios. Construimos un sitio y lo enviamos y fue rápido. Fue una historia bastante simple. Fue interesante porque gran parte de mi vida la he pasado siendo muy cuidadoso con el rendimiento. Aquí estábamos construyendo un sitio que era rápido por defecto. Sin carga de JavaScript, solo HTML, CSS y algunos SVG e imágenes. Eso fue todo. Y esta experiencia realmente moldeó cómo vimos el desarrollo web como equipo y lo que realmente es Astro, es una oportunidad para tratar de unir estas dos ideas diferentes. El poder de JavaScript, la expresividad y el control que tienes sobre lo que construyes, pero con la velocidad de algo que es mucho más HTML primero. Sin JavaScript enviado al cliente a menos que lo desees explícitamente. Entonces, la historia de rendimiento de un 11d mezclado con el poder de un Next.js, eso es lo que es Astro hoy. Entonces, ¿qué significa eso? Vamos a ver una demostración. Lo que tienes aquí es un sitio Astro bastante estándar. Tienes algunos activos estáticos en un directorio público y nuestros principales bloques de construcción aquí en un directorio Astro, componentes, diseños a los que llegaremos, pero pasarás la mayor parte del tiempo aquí en las páginas. Estas son las páginas de tu sitio, esencialmente un sistema de enrutamiento basado en archivos. Y dijimos en la parte superior que cualquier archivo Astro es un superconjunto en

7. HTML como base para páginas dinámicas

Short description:

Esta parte introduce el concepto de utilizar HTML como base para construir páginas web dinámicas. Explica cómo combinar scripting y markup utilizando un script de frontmatter, similar a los componentes de un solo archivo de Svelte o Vue. El ejemplo demuestra cómo combinar markup y JavaScript para crear contenido dinámico. También introduce el uso de componentes, como la cabeza común y una imagen de héroe, para mejorar la estructura HTML. Se explica el componente de cabeza común, incluyendo su capacidad para agrupar propiedades meta comunes y el uso de props para inyectar valores en el componente. También se menciona TypeScript de pasada.

En la parte superior de HTML. Así que lo que tenemos aquí es simplemente HTML. HTML válido, es bastante estático. Vamos a ejecutar esto con npm start. Eso iniciará el servidor de desarrollo de Astro y podrás verlo ejecutándose aquí en el navegador. Ahora, hablamos de querer hacer que HTML sea más dinámico, darle el poder de JavaScript en términos de expresarte y lo que puedes hacer, pero manteniendo esa estructura de documento HTML primero en términos de lo que estás construyendo, el lenguaje de lo que creas. La forma en que lo hacemos es con algo llamado un script de frontmatter. Esto es muy similar a Svelte o Vue si has utilizado su concepto de un componente de archivo único. Aquí vamos a hacer algo similar para comenzar a mezclar la idea de scripting y markup. Así que aquí simplemente definiremos una idea de un título, y será AstroDemo. Obtendremos un pequeño signo de exclamación por diversión. Y al igual que JSX, puedes combinar markup y JavaScript. Así que aquí podemos usar el título en el valor aquí, podemos usarlo como atributo, o podemos usarlo nuevamente aquí como un valor de contenido real en la página. Si actualizamos eso, verás que se actualiza con un nuevo título y signo de exclamación.

Pero queremos ir más allá, queremos seguir incorporando más conceptos de componentes modernos en cómo renderizas esta página. Así que pensemos en componentes, agreguemos algunos componentes a este HTML. Comencemos con dos. Uno es algo que llamaremos cabeza común. Y tengo que escribir eso correctamente, components.commonhead.astronaut, commonhead.astronaut. Y el otro es una imagen de héroe. Agreguemos una bonita imagen de héroe en la página. Empecemos con eso, simplemente añadámoslo aquí.

Y la cabeza común en realidad será un componente que se encargará de todas estas propiedades meta. Así que si tienes muchas páginas en tu sitio, no quieres repetirte una y otra vez, podemos usar un componente como este para agrupar algunas propiedades y etiquetas comunes de cabeza para que las uses en varias páginas. Ahora, la cabeza común es interesante porque en realidad toma props. Es un archivo Astro, es un fragmento de HTML que vamos a inyectar en el sitio, pero va a tomar la prop del título como veremos en un segundo. Puedes ver que lo hace utilizando nuevamente un concepto de Svelte de definir tus props como valores exportados. Así que aquí hemos exportado el título para mostrar que es una prop. Y luego podemos usarlo en el fragmento de HTML que vamos a inyectar en tu sitio. De nuevo, conceptos muy similares a los de React y Svelte, estamos tomando prestadas muchas ideas realmente buenas que hemos visto en la comunidad antes que nosotros. También puedes notar,

8. Astro: TypeScript, Reusabilidad y Obtención de Datos

Short description:

Admitimos TypeScript en tu front matter de forma predeterminada. Guardemos y actualicemos la página para ver la imagen del héroe. Tenemos un componente DOM reutilizable. El fragmento incluye un ejemplo de Pokédex, que demuestra la sintaxis similar a JSX y la obtención de datos en tiempo de compilación. Astro te permite utilizar top level await para el renderizado en el servidor, lo que resulta en HTML completamente estático.

si tienes buen ojo, hay TypeScript aquí. Admitimos TypeScript en tu front matter de forma predeterminada. Así que siéntete libre de mezclar y combinar allí. Guardemos esto y actualicemos la página. Y verás que la imagen del héroe también aparece. Así que tenemos un componente DOM real que hemos reutilizado. Sí, podríamos tener muchos, pero mantengámoslo en uno, eso es respetable.

Ahora, para el resto de esto, mostraré algunos fragmentos más interesantes. El primero es un Pokédex. ¿Qué buena demostración técnica no incluye Pokémon? Ahora hay algunas cosas interesantes que quiero mostrar en el fragmento. La primera es que cuando decimos que tenemos esta sintaxis similar a JSX, realmente lo decimos. Puedes ver aquí una expresión completa de JavaScript que mezcla la sintaxis de astro y JavaScript juntas. Así que al igual que el JSX al que estamos acostumbrados en React, vamos a usar esta expresión para renderizar múltiples componentes en la página. Aquí, vamos a mostrar realmente un sprite de Pokémon para los primeros tres Pokémon en el Pokédex. Oh, y tenemos que usarlo primero. Búsqueda de Pokémon. Y agreguemos un poco de display flex solo para colocarlos todos en la página. Mira eso. Así que si no conoces Pokémon, toda la idea de un Pokédex, nada de eso es importante. Lo que estamos haciendo aquí es divertirnos con Pokémon y generar tres pequeños sprites aquí, tres pequeñas imágenes. Lo interesante de este componente es que estamos introduciendo la idea de obtención de datos. Así que no enviamos todos los Pokémon conocidos por el hombre. Aquí tenemos la obtención de datos, obteniendo en tiempo de compilación y realizando una llamada a la API. No solo tenemos ese soporte a través de fetch, sino que también tenemos top level await. Así que la idea de esto afectando al usuario, es completamente en tiempo de compilación. Puedes usar top level await como parte de tu renderizado en el servidor y el usuario nunca lo ve. Así que no hay realmente una gran preocupación de performance para el usuario aquí porque todo esto se renderiza como HTML estático al final del día. Podemos ver eso en el panel de red aquí. Actualizaré y no hay JavaScript en la página, todo es HTML estático. Así que esa es una idea realmente interesante de cómo puedes expresarte con el lenguaje basado en HTML en el servidor llamado Astro de formas en las que estarías mucho más limitado si estuvieras utilizando un framework de front-end como React o Svelte donde no puedes simplemente agregar un top level await porque el usuario lo vería. En este mundo, estamos completamente renderizados en el servidor.

9. Usando Componentes de React en Astro

Short description:

Podemos usar componentes de React en una aplicación de Astro, generando marcado en el lado del servidor. Esto nos permite combinar Astro como un lenguaje HTML y React como un framework de JavaScript. No se limita solo a React; otros frameworks como Preact también son compatibles.

Entonces, en realidad no tenemos esas preocupaciones. Somos un poco más libres para expresarnos de esta manera sin el boilerplate.

Voy a mostrar otro pequeño fragmento de demostración aquí. Y eso es esta idea de regalar la parte divertida, un selector de emojis. Esto no es solo cualquier selector de emojis. Agreguemos nuestra importación aquí arriba. Puede que lo hayas visto en el directorio de componentes si lo estabas buscando. Este no es un archivo de Astro. Es un archivo JSX. Es un componente de React.

Dije al principio en la charla, ¿verdad? Hemos hecho componentes renderizados en el servidor. ¿Qué significa eso? Significa que te permitimos usar React en tu aplicación de Astro. Aquí tenemos un componente de React. Está utilizando otro paquete de npm. Está utilizando algo de CSS. Y todo esto genera marcado en el lado del servidor. Vamos a renderizar este componente en el lado del servidor. Aquí tenemos tres de ellos. Actualicemos la página. Y mira eso. Acabamos de combinar. De hecho, lo haré. Así puedes verlo tú mismo. Hemos combinado Astro como un lenguaje HTML y React como un framework JavaScript. Pero los hemos renderizado todos en el lado del servidor. Todo generando HTML al final del día. Así que puedes hacer esto con cualquier framework. Es el React Summit. Usaremos React. Pero Preact es

10. Astro: Interactividad opcional con JavaScript

Short description:

Cualquier cosa que se renderice a HTML se puede usar en el servidor de esta manera. El usuario no ve JavaScript en su carga final. La idea es hacer que la interactividad en JavaScript sea opcional a nivel de componente. Al agregar un modificador, como 'idle', a un componente escrito en un framework como React o pre-actores, se puede generar código para hidratar el componente en la página, haciéndolo completamente interactivo en el cliente. Astro también ofrece el modificador 'visible', que solo hidrata los componentes cuando se vuelven visibles en la pantalla. Este enfoque ayuda a reducir la cantidad de JavaScript enviado al usuario y permite la hidratación parcial, mezclando HTML estático y JavaScript del lado del cliente en base a cada componente.

también es compatible. Cualquier cosa que se renderice a HTML se puede usar en el servidor de esta manera. El usuario no ve JavaScript en su carga final. Ahora, algunas cosas que realmente podrían querer que sean dinámicas. Por ejemplo, se supone que se pueden hacer clic en ellas. Y las tenemos generando emojis aleatorios, pero no sucede nada cuando hago clic. Entonces, es esta idea de que realmente quieres alguna funcionalidad. No estamos diciendo que elimines todo el JavaScript de la página. Pero la postura que tomamos es que la interactividad en JavaScript debería ser opcional, no a nivel de sitio o a nivel de página, sino a nivel de componente por componente.

Entonces, lo que tenemos aquí es la idea de tomar un componente escrito en un framework como React o pre-actores. Y agregarle un modificador aquí para promoverlo al cliente. Digamos que haremos idle aquí. Lo que hace esto es generar no solo el marcador de posición, sino también, verás aquí, código para hidratar este componente en la página. Entonces, ahora tenemos un componente completamente interactivo. Todo funciona en el cliente. Y verás aquí en el panel de red, un seguimiento de red real, que muestra cómo se carga esto. En realidad se está ejecutando en el navegador. Esto es desarrollo. Por lo tanto, estamos siendo un poco más agresivos en el JavaScript que enviamos en producción. Esto se empaquetaría, minimizaría y se eliminaría del árbol.

Otra cosa genial aquí es la idea de visible. Si lo escribes correctamente, visible. Y esto, lo haré aquí. A medida que te desplazas hacia abajo, solo será cuando llegues al componente real que toma ese costo y realmente hidrata esos componentes. Entonces, si algo está debajo del pliegue, en realidad nunca pagarías el precio de cargarlo hasta que realmente interactúes con él y lo veas en tu pantalla. Hay muchas más cosas geniales como esta en Astro que simplemente no tengo tiempo para mostrarte. Ni siquiera hemos llegado a cómo funciona el estilo de ámbito en el marcado por defecto. Todo esto se trata de ayudarte a construir un sitio que tenga la menor cantidad de JavaScript y el menor peso posible que deba enviarse al usuario. El superpoder de Astro es algo llamado hidratación parcial. Esta es esa capacidad que viste de mezclar HTML estático y JavaScript del lado del cliente en base a cada componente. Por defecto,

11. Astro: Hidratación opcional y Salida HTML-First

Short description:

Cero JavaScript del lado del cliente de forma predeterminada. Opta por componentes individuales para la hidratación. Astro es una forma moderna de construir sitios web más rápidos con una salida HTML-First. Te permite usar React en el servidor o en el cliente, o ambos. Optar por componentes individuales para la hidratación es el superpoder de la hidratación parcial y la columna vertebral de Astro. Visita astro.build para obtener una vista previa temprana.

Todo lo que construyas con Astro es 100% HTML. Cero JavaScript del lado del cliente de forma predeterminada. Pero luego tienes la capacidad de opcionalmente hidratar componentes individuales que lo necesiten. Por ejemplo, algún tipo de carrusel de imágenes o algo con interactividad, tal vez recuperación de datos del lado del cliente. Puedes optar por eso a nivel de componente. Esto es algo que obtenemos de forma gratuita porque hemos cambiado la forma en que pensamos en lo que estás construyendo. No es una gran aplicación JavaScript que construyes con Astro, en realidad estás construyendo un sitio web, un sitio web que sigue algo llamado arquitectura de islas. Este término fue acuñado por Jason Miller de Preact y Google. Y se trata de pensar en tu sitio web no como una gran aplicación, sino como una serie de componentes en la página, algunos de ellos renderizados estáticamente sin peso del lado del cliente, pero otros pueden ser hidratados individualmente casi como islas aisladas entre sí. Entonces, en lugar de una gran aplicación, tienes muchas aplicaciones pequeñas, mini componentes de React que se renderizan individualmente y aislados entre sí. Por lo tanto, no se bloquean entre sí, los componentes más pequeños se hidratan mucho más rápido, mientras que uno más grande y lento tarda un poco más. Todos están aislados entre sí y se hidratan de forma progresiva a medida que se cargan. Esto es algo que obtenemos de forma gratuita al pensar de esta manera. Esta idea de islas y componentes y una salida HTML-First real. Ese es el superpoder de Astro. Entonces, para resumir, Astro es una forma moderna de construir sitios web más rápidos. De forma predeterminada, todo lo que construyas con Astro no tiene JavaScript del lado del cliente. Todo se basa y se enfoca en HTML, pero con la capacidad de optar por diferentes componentes para la representación del lado del cliente. Puedes usar React en el servidor, puedes usarlo en el cliente, puedes hacer ambas cosas. Puedes mezclarlo en tu markdown. Puedes hacer todas estas cosas a nivel de componente que son realmente difíciles de hacer en otros frameworks. Y esa idea de optar por componentes individuales para la hidratación en lugar de enviar una aplicación completa, ese es el superpoder de la hidratación parcial que es el núcleo de lo que Astro trata. Una de las desventajas de grabar esta charla con tanta anticipación es que en realidad no sé cuál será el estado de este proyecto cuando veas este video. No puedo comprometerme a nada en este momento, pero lo que puedo decir es que visites astro.build para obtener una vista previa temprana de en qué estamos trabajando. No podemos esperar para poner esto en tus manos y ver qué construyes con esta nueva forma de construir sitios web utilizando la hidratación parcial y componentes de React en el servidor. Espero que hayas disfrutado esta charla. Que tengas un excelente resto de tu conferencia y gracias por ver.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

JSNation Live 2021JSNation Live 2021
31 min
Vite: Rethinking Frontend Tooling
Top Content
Vite is a new build tool that intends to provide a leaner, faster, and more friction-less workflow for building modern web apps. This talk will dive into the project's background, rationale, technical details and design decisions: what problem does it solve, what makes it fast, and how does it fit into the JS tooling landscape.
React Advanced Conference 2022React Advanced Conference 2022
25 min
A Guide to React Rendering Behavior
Top Content
React is a library for "rendering" UI from components, but many users find themselves confused about how React rendering actually works. What do terms like "rendering", "reconciliation", "Fibers", and "committing" actually mean? When do renders happen? How does Context affect rendering, and how do libraries like Redux cause updates? In this talk, we'll clear up the confusion and provide a solid foundation for understanding when, why, and how React renders. We'll look at: - What "rendering" actually is - How React queues renders and the standard rendering behavior - How keys and component types are used in rendering - Techniques for optimizing render performance - How context usage affects rendering behavior| - How external libraries tie into React rendering
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Building Better Websites with Remix
Top Content
Remix is a new web framework from the creators of React Router that helps you build better, faster websites through a solid understanding of web fundamentals. Remix takes care of the heavy lifting like server rendering, code splitting, prefetching, and navigation and leaves you with the fun part: building something awesome!
React Advanced Conference 2023React Advanced Conference 2023
33 min
React Compiler - Understanding Idiomatic React (React Forget)
Top Content
React provides a contract to developers- uphold certain rules, and React can efficiently and correctly update the UI. In this talk we'll explore these rules in depth, understanding the reasoning behind them and how they unlock new directions such as automatic memoization. 
React Advanced Conference 2022React Advanced Conference 2022
30 min
Using useEffect Effectively
Top Content
Can useEffect affect your codebase negatively? From fetching data to fighting with imperative APIs, side effects are one of the biggest sources of frustration in web app development. And let’s be honest, putting everything in useEffect hooks doesn’t help much. In this talk, we'll demystify the useEffect hook and get a better understanding of when (and when not) to use it, as well as discover how declarative effects can make effect management more maintainable in even the most complex React apps.
React Summit 2023React Summit 2023
32 min
Speeding Up Your React App With Less JavaScript
Top Content
Too much JavaScript is getting you down? New frameworks promising no JavaScript look interesting, but you have an existing React application to maintain. What if Qwik React is your answer for faster applications startup and better user experience? Qwik React allows you to easily turn your React application into a collection of islands, which can be SSRed and delayed hydrated, and in some instances, hydration skipped altogether. And all of this in an incremental way without a rewrite.

Workshops on related topic

React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React Advanced Conference 2021React Advanced Conference 2021
132 min
Concurrent Rendering Adventures in React 18
Top Content
Featured WorkshopFree
With the release of React 18 we finally get the long awaited concurrent rendering. But how is that going to affect your application? What are the benefits of concurrent rendering in React? What do you need to do to switch to concurrent rendering when you upgrade to React 18? And what if you don’t want or can’t use concurrent rendering yet?

There are some behavior changes you need to be aware of! In this workshop we will cover all of those subjects and more.

Join me with your laptop in this interactive workshop. You will see how easy it is to switch to concurrent rendering in your React application. You will learn all about concurrent rendering, SuspenseList, the startTransition API and more.
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
React Hooks Tips Only the Pros Know
Top Content
Featured Workshop
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
React Advanced Conference 2021React Advanced Conference 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured WorkshopFree
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn