#CSR, #SSR y #SSG: qué son y cuándo usarlos

Programación en español
27 Nov 202342:11

Summary

TLDREl video discute las diferencias entre Client Side Rendering (CSR), Server Side Rendering (SSR) y Static Site Generation (SSG). Explicó los problemas de CSR como la lenta carga de páginas en blanco y las dificultades con SEO. Presentó SSR como una solución para mejorar la experiencia de usuario y SEO, aunque requiere una conexión al servidor y puede tener problemas con ciertas librerías. Finalmente, SSG se describe como ideal para contenido estático, permitiendo una carga rápida y efectiva sin un servidor en ejecución.

Takeaways

  • 🌟 El Client Side Rendering (CSR) envía una página en blanco al navegador, que luego descarga y ejecuta un bundle de JavaScript para renderizar la aplicación.
  • 🚀 Los SPAs (Single Page Applications) utilizan un router para manipular el DOM y mostrar diferentes componentes sin recargar la página completa.
  • 💡 Las APIs del navegador, como local storage y document, no están disponibles fuera del contexto del navegador, por lo que pueden causar errores en un entorno de server-side rendering.
  • 🔍 El CSR puede tener problemas con el SEO ya que los crawlers pueden no indexar correctamente una página que renderiza dinámicamente su contenido.
  • 🎯 Server Side Rendering (SSR) prerenderiza la página en el servidor y envía el HTML al cliente, mejorando la experiencia de usuario y la indexación por parte de los motores de búsqueda.
  • 📦 Static Site Generation (SSG) ocurre en tiempo de construcción, prerenderizando toda la aplicación en HTML estatico y mejorando la velocidad de carga y el SEO.
  • 🔄 La hidratación (hydration) en SSR permite reutilizar los nodos HTML ya presentes en la página para agregar interactividad sin tener que volver a renderizarlos completamente.
  • 🔧 La resumabilidad (resumability) es un enfoque que combina SSR y CSR, enviando una cantidad mínima de JavaScript para hacer la página interactiva y luego descargando el resto en paralelo.
  • 🛠️ La selección de la estrategia de rendering (CSR, SSR o SSG) depende del contexto del proyecto, como la necesidad de SEO, la interacción del usuario y la frecuencia de cambios en el contenido.
  • 🔑 Es importante entender en qué plataforma se están ejecutando las APIs y hacer workarounds adecuados para evitar errores al utilizar APIs propias del cliente en un entorno de servidor.
  • 🌐 Frameworks como Astro permiten combinar SSR y SSG, ofreciendo flexibilidad para renderizar parte de la aplicación en el servidor y parte en el cliente según sea necesario.

Q & A

  • ¿Qué es el Server Side Rendering (SSR) y por qué es importante?

    -El Server Side Rendering es una técnica en la que los componentes y nodos HTML son generados en el servidor en lugar del cliente. Es importante porque mejora la experiencia del usuario al evitar la renderización inicial en blanco y también beneficia el SEO al proporcionar contenido estático que los crawlers pueden indexar fácilmente.

  • ¿Qué es el Client Side Rendering (CSR) y cómo funciona?

    -El Client Side Rendering es un método de renderización donde el navegador recibe una página en blanco y luego descarga un bundle de JavaScript que se encarga de crear el árbol y nodos del DOM necesarios para renderizar la aplicación. Funciona en aplicaciones como SPAs (Single Page Applications) donde la navegación entre páginas no implica una recarga completa de la página.

  • ¿Qué es la Static Site Generation (SSG) y cómo se diferencia del SSR y CSR?

    -La Static Site Generation es una técnica donde la aplicación web se construye completamente en tiempo de construcción, generando archivos estáticos que no requieren un servidor en ejecución para ser servidos. Se diferencia del SSR en que no hay un servidor procesando solicitudes en tiempo real, y del CSR en que no hay renderización en el lado del cliente, ya que todo está pre-renderizado y estático.

  • ¿Qué problemas pueden surgir con el uso de SSR y cómo pueden solucionarse?

    -El uso de SSR puede traer problemas como la duplicación de renderización y la incompatibilidad con algunas librerías o APIs del cliente. Estos problemas pueden solucionarse utilizando técnicas como la hidratación selectiva, que permite reutilizar nodos HTML ya presentes en el cliente, y workarounds para las librerías que dependen de objetos del navegador.

  • ¿Qué es la hidratación selectiva y cómo funciona?

    -La hidratación selectiva es una técnica que permite reutilizar nodos HTML ya presentes en el cliente al momento de la renderización. Funciona identificando nodos con la misma estructura en el servidor y en el cliente, permitiendo que el JavaScript se centre en reemplazar o mejorar sólo los nodos necesarios, mejorando así la eficiencia y la experiencia del usuario.

  • ¿Qué ventajas aporta el uso de la Static Site Generation?

    -Las ventajas de la Static Site Generation incluyen una mayor rapidez ya que solo se descargan archivos estáticos como HTML y CSS, mejor SEO debido a la presencia de metadatos estáticos, y la reducción de peticiones adicionales al servidor ya que los datos son incluidos en la página desde la construcción.

  • ¿Cuáles son las desventajas del Client Side Rendering?

    -Las desventajas del Client Side Rendering incluyen la posible lenta inicial debido al tiempo necesario para descargar el bundle de JavaScript, problemas de SEO ya que los crawlers pueden tener dificultades indexando contenido generado dinámicamente, y la dependencia de las APIs del navegador que no están disponibles en un entorno de servidor.

  • ¿Qué es la 'Island' en el contexto de Astro y cómo funciona?

    -En Astro, una 'Island' se refiere a cualquier componente de interfaz de usuario interactivo en la página. Funcionan renderizando páginas HTML en el servidor e inyectando placeholders o slots alrededor de regiones altamente dinámicas que luego pueden ser hidratadas en el cliente como pequeños widgets o contenidos reutilizables, aprovechando su HTML inicial renderizado en el servidor.

  • ¿Cuáles son los casos de uso ideales para cada técnica de renderización?

    -El Client Side Rendering es ideal para sistemas internos y aplicaciones que no requieren posicionamiento en buscadores. El Server Side Rendering es adecuado para aplicaciones públicas donde el SEO es importante y se benefician de la renderización inicial de contenido estático. La Static Site Generation es perfecta para sitios de contenido estático como blogs o portfolios, donde no se requiere interacción dinámica y se desea una construcción rápida y eficiente.

  • ¿Cómo se puede implementar la hidratación selectiva en React?

    -En React, la hidratación selectiva se puede implementar utilizando el concepto de Suspense. Esto permite hidratar ciertas partes de la página para que la web cargue estáticos por un lado y componentes interactivos por otro, sin tener que esperar a que se hidrate todo el árbol del DOM.

  • ¿Qué es la 'resumabilidad' en el contexto de la renderización web?

    -La 'resumabilidad' se refiere a la capacidad de una aplicación web de ser interactiva de una manera rápida y eficiente después de su carga inicial. Implica la eliminación de la duplicación en el proceso de renderización y la descarga en paralelo de partes de JavaScript que no incluyen renderización de nodos, permitiendo que la web sea interactiva mucho antes y de una manera más performante.

Outlines

00:00

🤔 Introducción a Server Side Rendering (SSR)

El video comienza con una introducción al tema de Server Side Rendering, explicando la razón por la que se ha elegido este día para hablar sobre SSR, Static Site Generation y Client Side Rendering. El habla se desplaza hacia la explicación de un error común relacionado con la función 'local storage' que no está definida, lo que lleva al analista a profundizar en el uso de diferentes estrategias de rendering.

05:01

🌐 Client Side Rendering: Conceptos y Desventajas

Se describe el proceso de Client Side Rendering, donde el navegador recibe una página en blanco y luego descarga un 'bundle' de JavaScript para renderizar la aplicación. Se discuten las ventajas de esta técnica, como la rapidez en el servidor y la capacidad de desarrollo de SPAs, así como sus desventajas, incluyendo la mala experiencia de usuario con una página en blanco y problemas SEO relacionados con la indexación de contenidos dinámicos.

10:02

💡 Ventajas y Desventajas de Server Side Rendering (SSR)

Se abordan las ventajas de SSR, como la mejora en SEO y la carga inicial más rápida de contenido, así como la reducción de peticiones al servidor gracias a la pre-renderización de datos. También se mencionan las desventajas, como el posible aumento de tamaño en la aplicación y la incompatibility con ciertas librerías o APIs del navegador que no están disponibles en el servidor.

15:04

🚀 Static Site Generation: Conceptos y Aplicaciones

Se define Static Site Generation y se compara con SSR. Se explica que en SSG, la generación de contenido estático ocurre durante la construcción del sitio, eliminando el JavaScript innecesario y mejorando la velocidad y SEO. Se mencionan ejemplos de aplicaciones estáticas como blogs y portfolios que son ideales para SSG, y se discuten las limitaciones en términos de interacción y actualización de contenido.

20:04

🔄 Hydración y Resumabilidad: Futuro del Rendering

Se introducen los conceptos de Hydración (reutilización de nodos HTML ya presentes en la página) y Resumabilidad (renderizado de páginas con una cantidad mínima de JavaScript para interacción inicial). Se mencionan frameworks como Quick y Astro que implementan estas técnicas, mejorando la eficiencia y la experiencia de carga de la página, permitiendo una actualización progresiva de contenidos.

25:05

📝 Casos de Uso: Client Side Rendering vs Server Side Rendering vs Static Site Generation

Se presentan diferentes escenarios donde se pueden aplicar Client Side Rendering, Server Side Rendering o Static Site Generation. Se recomienda Client Side Rendering para sistemas internos, SSR para aplicaciones web públicas que requieren SEO y SSG para sitios estáticos como blogs o portfolios. Se enfatiza la importancia de entender el contexto y las necesidades del proyecto para elegir la estrategia de rendering adecuada.

Mindmap

Keywords

💡Server Side Rendering (SSR)

El Server Side Rendering (SSR) es una técnica en la que el contenido web se renderiza en el servidor antes de enviarse al cliente, lo que mejora la experiencia del usuario al mostrar contenido inmediato y es beneficioso para el SEO. En el video, el SSR se menciona como una estrategia para solucionar problemas de renderizado y mejorar la accesibilidad de contenidos para los crawlers de motores de búsqueda.

💡Client Side Rendering (CSR)

El Client Side Rendering (CSR) es un método de desarrollo web donde el contenido se renderiza en el navegador después de que se haya descargado el código JavaScript necesario. Esto puede resultar en una página en blanco inicial y dependiendo del tamaño del bundle y la conexión del usuario, puede causar retrasos en la visualización del contenido. El CSR es común en aplicaciones single-page (SPAs) como React, Angular y Vue.

💡Static Site Generation (SSG)

La Static Site Generation (SSG) es un enfoque donde el sitio web se genera completamente en tiempo de construcción, creando archivos estáticos que son servidos al cliente sin la necesidad de un servidor en tiempo de ejecución. Esto resulta en sitios web muy rápidos y eficientes, pero que carecen de interacción dinámica. Es ideal para contenidos estáticos como blogs o sitios de portfolio.

💡LocalStorage

LocalStorage es una característica de los navegadores web que permite el almacenamiento de datos en el lado del cliente. Los datos almacenados en LocalStorage son accesibles desde JavaScript y persisten en el dispositivo del usuario a pesar de cerrar el navegador. Sin embargo, su uso en SSR puede resultar en errores ya que LocalStorage no está disponible en el servidor.

💡SEO

SEO (Search Engine Optimization) es la práctica de mejorar la visibilidad de un sitio web en los resultados de búsqueda de motores como Google. Un buen SEO implica la optimización de contenido, metadatos y otros elementos para que los crawlers de búsqueda puedan indexar y clasificar adecuadamente el sitio web. SSR y SSG son estrategias que pueden mejorar el SEO al proporcionar contenido estático y metadata bien definidos.

💡Single Page Applications (SPAs)

Las Single Page Applications (SPAs) son aplicaciones web que carzan una sola página que se actualiza dinámicamente con JavaScript sin necesidad de recargar la página completa. Estas aplicaciones suelen utilizar CSR para gestionar la lógica y el estado de la aplicación en el navegador.

💡Bundle

Un bundle es un archivo compactado que contiene todo el código necesario para una aplicación web, incluyendo JavaScript, CSS y otros recursos. En el contexto de CSR, el bundle se descarga al principio de la carga de la página, lo que puede causar un tiempo de espera antes de que el contenido sea renderizado en la pantalla.

💡Hydration

La hidratación (hydration) es un proceso en el que se reutilizan los nodos HTML ya renderizados en el servidor (SSR) al cargar la aplicación en el cliente (CSR). Esto mejora la eficiencia al evitar la duplicación de nodos y mejorar el rendimiento al no tener que re-renderizar elementos que ya están presentes en la página.

💡Islands

Las islas (islands) son una técnica en la que se combinan elementos estáticos generados en el servidor con componentes interactivos que se cargan y se hidratan en el cliente. Esta técnica permite una renderización más eficiente al enviar solo los componentes necesarios y reutilizando el HTML estático generado previamente.

💡Framework

Un framework es un conjunto de herramientas y bibliotecas pre-construidas que facilitan el desarrollo de aplicaciones software. Los frameworks como React, Angular y Vue proporcionan estructuras y的功能 para crear aplicaciones web de manera más eficiente y escalable.

Highlights

El video discute sobre las diferencias y particularidades entre Client Side Rendering (CSR), Server Side Rendering (SSR) y Static Site Generation (SSG).

CSR envía una página en blanco al navegador y luego utiliza un bundle de JavaScript para renderizar la aplicación.

Con CSR, las APIs del navegador como local storage o document.js solo están disponibles después de que el JavaScript se haya cargado.

Las Single Page Applications (SPAs) utilizan un router para manipular el DOM y cambiar los nodos en función de la ruta.

CSR tiene la desventaja de no ser amigable con SEO debido a que los crawlers no pueden indexar contenido generado dinámicamente.

SSR prerenderiza la página en el servidor y luego envía el HTML al cliente, mejorando la experiencia de usuario y el SEO.

SSR puede tener desventajas como la duplicación del proceso de renderización y la incompatibilidad con ciertas librerías del cliente.

SSG genera la página en tiempo de construcción, lo que la hace ideal para sitios de contenido estático como blogs o portfolios.

Con SSG, los cambios en el sitio requieren una nueva construcción y despliegue, a diferencia de SSR que puede actualizarse en tiempo real.

Hydration es un concepto que busca reutilizar los nodos HTML ya presentes en la página para mejorar la eficiencia de la interacción con el DOM.

Resumability es una característica que permite a las páginas ser interactivas desde el principio con una carga mínima de JavaScript.

Frameworks como Astro permiten la implementación de islas, una arquitectura que combina componentes estáticos y dinámicos en una sola página.

Astro permite la selección de componentes para SSR, CSR o SSG, ofreciendo versatilidad en el rendizado de la página.

CSR es adecuado para sistemas internos de empresas o aplicaciones que no requieren posicionamiento en buscadores.

SSR es ideal para aplicaciones que requieren un buen posicionamiento en buscadores y contenido estático.

SSG es la opción perfecta para sitios que no cambian frecuentemente y no dependen de variables del usuario como blogs personales.

Es importante entender el contexto en el que se utiliza cada estrategia de renderizado para aprovechar al máximo sus ventajas.

El video destaca la importancia de elegir la estrategia de renderizado adecuada según las necesidades específicas del proyecto.

Transcripts

play00:00

a ver mi gente

play00:03

bonita vamos a ver por qué esta clase

play00:07

por qué quería hablarles el día de hoy

play00:08

sobre server Side rendering

play00:10

[Música]

play00:12

e Por qué quería hablar sobre server

play00:14

Side rendering sobre static Side

play00:15

generation y sobre client Side rendering

play00:18

Sí en los últimos vídeos que tengo en el

play00:21

canal de YouTube sobre angular mucha

play00:23

gente bueno mucha gente no un par de

play00:25

personas Sí y por Instagram también me

play00:26

escribieron luego me preguntaron eh

play00:30

sobre un error que les aparecía el error

play00:32

específicamente era que local storage no

play00:34

estaba definido s a lo que mi pregunta

play00:36

directamente fue revisa si tienes

play00:38

cerveza de render en activo y me dijeron

play00:41

que sí Me confirmaron que si lo tenía en

play00:42

activo entonces a partir de esa

play00:44

confusión se me ocurrió bueno obviamente

play00:47

pues aquí falta explicar algún par de

play00:50

cosas sí en este caso del uso del

play00:52

servers rendering y pues otras

play00:54

estrategias de PR rendering que tenemos

play00:56

vale Y el Por qué O sea para llegar a la

play00:59

Fuente del por qué ocurren ese tipo de

play01:01

errores si que al final es O sea la idea

play01:04

de esto es aclarar el Por qué pasa eso

play01:06

sí entonces por eso el día de hoy vamos

play01:09

a ver estas tres cosas

play01:11

Vale entonces vamos a comenzar por aquí

play01:14

con el client s rendering sí client s

play01:18

rendering es Pues básicamente el método

play01:20

de renderización que tenemos que es

play01:21

usual de las aplicaciones que que

play01:23

hacemos que desarrollamos sea con

play01:25

angular sea con react sea con View sea

play01:27

con spelt y pare de contar bien

play01:31

qué es lo que pasa cuando estamos

play01:33

renderizando del lado del cliente que

play01:35

justamente Esas son las siglas client s

play01:36

rendering bien lo que pasa es que al

play01:40

cliente se le envía o el navegador en

play01:42

este caso Cuando digo cliente me refiero

play01:44

al navegador vale lo que recibe el

play01:45

navegador es una página en blanco sí y

play01:47

se descarga un bundle de javascript ese

play01:50

bundle es justamente el build que

play01:52

nosotros hicimos cuando desplegamos la

play01:53

aplicación no el build de toda la

play01:55

aplicación Sí el que después copiamos la

play01:59

carpeta dis y después desplegamos un

play02:01

servidor Pues ese es el bundle Ah tras

play02:04

descargarlo es la aplicación de

play02:06

javascript que tenemos repito sea hecha

play02:09

con react angular View lo que sea pero

play02:12

es la parte javascript la que se encarga

play02:15

de crear el árbol y de crear los nodos

play02:18

Mejor dicho del dom html y renderizar lo

play02:21

que sea que nosotros hayamos eh

play02:23

desarrollado sí es decir los componentes

play02:25

el menú eh la web la aplicación lo que

play02:27

sea Sí por eso es que cuando nosotros

play02:30

iniciamos una aplicación de este tipo lo

play02:31

que lo primero que vemos es una página

play02:33

en blanco y después Boom se renderiza

play02:35

todo Sí después de que se descargue el

play02:37

javascript Entonces qué pasa eh con este

play02:40

tipo de aplicaciones que se las conoce

play02:42

como spas o single page applications

play02:45

porque nosotros cuando navegamos bien eh

play02:48

Generalmente en estas aplicaciones no es

play02:50

que estemos pasando de un html a otro

play02:53

vale por eso es que utilizamos un router

play02:55

por ejemplo react router dom por ejemplo

play02:57

el router de angular etcétera lo que

play03:00

está pasando aquí es que es el mismo

play03:01

bondel es la misma aplicación de

play03:03

javascript quien está manipulando el

play03:05

routing y cambiando los nodos del Don

play03:08

para que se visualice pues uno u otro

play03:10

componente Sí Mientras mantiene por

play03:12

ejemplo el nav y el footer estáticos Sí

play03:16

pero todo está ahí en la misma ruta

play03:18

porque de hecho si se fijan en el código

play03:21

lo que tenemos es un html con un

play03:22

elemento Root y ese elemento Root llama

play03:25

al elemento de la aplicación llama al

play03:26

componente digamos principal o al módulo

play03:28

principal vale para car después

play03:30

absolutamente todo entonces como ven

play03:32

todo se renderiza del lado del cliente

play03:35

todo se renderiza en el navegador Sí por

play03:38

qué Porque lo crea o sea los nodos del

play03:40

de html del dom

play03:42

eh que estamos viendo en la aplicación

play03:45

lo crea javascript o se crean a través

play03:47

de javascript vale justamente cuando ya

play03:50

están disponibles en el navegador y por

play03:51

esta razón tenemos eh Cuando

play03:53

desarrollamos cualquier cosa con react

play03:55

con angular con View etcétera tenemos a

play03:58

disposición las apis del navegador

play04:01

Recuerden que cuando nosotros accedemos

play04:02

a por ejemplo local storage session

play04:05

storage

play04:06

eh el objeto window el el objeto perdón

play04:09

document eh la Api de geolocalización y

play04:13

pare de contar esas apis no son del

play04:15

lenguaje no son de javascript esas apis

play04:18

están disponibles sí a través de qué a

play04:21

través de el navegador el navegador es

play04:23

quien nos provee de esas apis y la

play04:24

podemos utilizar Obviamente con

play04:26

javascript vale Pero si estamos fuera

play04:28

del navegador esas apis no existen Sí o

play04:30

sea nosotros no podemos eh hablando en

play04:33

el mismo contexto de de de lenguaje

play04:35

nosotros no podemos acceder a un objeto

play04:36

window o un objeto document o un local

play04:39

storage en nojs estamos trabajando con

play04:42

javascript igual pero estamos en otro

play04:44

entorno sí estamos e en otro cómo se

play04:47

llama esto en otro

play04:49

engine y por lo tanto pues no tenemos

play04:51

esas mismas apis disponibles Sí ya vamos

play04:54

a ver el Por qué les digo

play04:58

esto cosillas que tenemos ventajas y

play05:01

desventajas del clies rendering sí

play05:04

repito Esta es la la estrategia más

play05:06

usual que tenemos cada vez que

play05:08

desarrollamos una aplicación es lo que

play05:10

siempre estamos haciendo no sea con las

play05:12

herramientas ya mencionadas etcétera sí

play05:14

obviamente tenemos rapidez en el

play05:16

servidor Por qué Porque el servidor pues

play05:18

Generalmente solamente se encargaría de

play05:20

H recibir peticiones http o Pues

play05:23

desplegar los los cómo se llama Los

play05:25

bundles enviarlos al navegador y pues ya

play05:28

está una vez el navegador los tiene

play05:30

lo que hace eh nuestro bundle es a

play05:33

generar los los componentes y pues

play05:35

cambiarlos según las rutas que que

play05:37

estemos visitando Sí luego el modelo

play05:40

pues obviamente soporta el desarrollo de

play05:42

spas sí que es lo que desarrollamos

play05:45

básicamente no hay necesidad de

play05:46

configuración consideraciones

play05:47

adicionales al desarrollar e o

play05:49

interactuar con las apis del navegador

play05:50

que es justamente a lo que estamos

play05:51

acostumbrados si yo quiero manejar local

play05:53

storage o session storage pues lo puedo

play05:55

hacer aquí sin ningún problema no me va

play05:57

a salir un local storage si son defin

play06:00

por ejemplo sí como desventajas porque

play06:04

obviamente tiene que tener desventajas

play06:06

porque si no para qué vamos a cambiar

play06:08

esto o vamos a crear alternativas como

play06:10

lo serían server rendering o static

play06:12

generation vale en este caso eh No hay

play06:17

un render inicial Más allá de la página

play06:19

en blanco sí y qué pasa con que no hay

play06:21

un render inicial Más allá de la página

play06:22

en Blanco Número Uno El usuario lo que

play06:25

recibe es esa página en blanco Entonces

play06:27

si el bondel es muy grande si lo si lo

play06:29

que tiene que descargar el navegador es

play06:31

es pesa mucho vamos y el usuario tiene

play06:33

una mala conexión a internet pues lo que

play06:35

va a ver es una página en blanco durante

play06:37

algunos segundos Sí en el peor de los

play06:39

casos un caso muy cataclísmico Pues en

play06:41

un minuto o algo así de una página en

play06:42

blanco y ya está Entonces eso no es para

play06:45

nada ideal número uno número dos como

play06:47

todos los nodos se generan de forma

play06:48

dinámica en el cliente los crawlers de

play06:51

los navegadores bien no tienen forma de

play06:54

saber qué información va a desple va va

play06:57

a renderizar Perdón nuestra web sí o

play07:00

nuestra aplicación web o nuestra spa y

play07:03

es por esto que justamente siempre

play07:05

lidiamos con eh las fallas de El

play07:08

posicionamiento en buscadores o sea seo

play07:11

Sí cuando utilizamos react angular View

play07:13

etcétera como eh o utilizando client

play07:16

Side rendering Vale cuando desplegamos

play07:17

la aplicación Pues nos damos cuenta de

play07:19

que no hay metadata de que pues no hay

play07:21

información sobre la web y por lo tanto

play07:23

no se indexa como cualquier otra web por

play07:26

ejemplo de eh yo que sé una web estática

play07:30

sí entiendas estática como que tenemos

play07:33

ahí los archivos html con toda la

play07:34

metadata eh todos los metatags y todo lo

play07:37

demás bien Por qué Porque toda esta

play07:39

metadata se genera de forma dinámica y

play07:41

los crawlers no van a ser una petición

play07:43

para que esto se descargue van a esperar

play07:45

que se descargue que se render Y pues lo

play07:47

van a leer sino que van a ir y lo que

play07:48

van a encontrarse es un html con un

play07:51

elemento Root ya está dentro no va a

play07:55

haber absolutamente nada entonces el cl

play07:57

rendering con este tipo de eh pues

play08:00

obviamente siempre ha tenido un fleco en

play08:02

la parte del

play08:03

seo

play08:08

vale vamos ahora con una alternativa que

play08:12

es el server Side rendering si que pues

play08:14

obviamente ha tomado bastante auge sobre

play08:17

todo con la salida Pues de next como

play08:19

meta framework pues obviamente También

play08:21

tenemos angular universal tenemos nox

play08:23

como meta framework de View Tenemos

play08:25

también el tema de las islas de ast que

play08:27

llevamos allá vale pero cuando hablamos

play08:29

de ser rendering qué es lo que pasa aquí

play08:32

con respecto o en en contraposición al

play08:35

client s Side rendering sí en este caso

play08:38

los componentes los nodos html son

play08:40

generados en el servidor no en el

play08:42

cliente vale se hace un prerendering sí

play08:46

se renderiza en el servidor y luego se

play08:49

envía al cliente cuando el navegador

play08:51

recuerden cuando hablamos de cliente

play08:52

hablamos del navegador eh solicita la

play08:55

web o alguna de sus páginas Sí ya se

play08:58

imaginarán que tenemos que tener ahí un

play09:00

servidor escuchando cuando el cliente

play09:02

pues le manda una petición Mira Pásame

play09:03

la página esta el servidor PR renderiza

play09:07

esa página se la envía al cliente el

play09:09

cliente construye el dom sí le muestra

play09:12

al usuario el html y vamos a ver lo que

play09:14

pasa

play09:15

después a partir de lo que el cliente

play09:17

recibe el crea el dom a partir de ese

play09:20

html sí y el servidor envía ese html de

play09:24

forma inicial pero luego pero luego

play09:26

porque ya se imaginarán Ajá bueno me

play09:27

envía el html y cuando cuando el usuario

play09:29

de clic qué va a pasar Pues no va a

play09:31

pasar nada Por qué Porque si me estás

play09:33

enviando nada más html pues la web no es

play09:35

interactiva todavía sí lo que va a pasar

play09:38

Es que luego el servidor te va a mandar

play09:40

el js Sí el javascript para darle

play09:43

interacción a esa

play09:45

web aquí hay un fleco importante Sí ya

play09:49

vamos a ver qué pasa aquí el fleco aquí

play09:52

es que obviamente la renderización

play09:55

ocurre dos veces se duplica el

play09:57

procedimiento Por qué Porque tenemos que

play09:59

PR renderizar en el servidor luego

play10:01

mandamos el html al cliente luego

play10:04

mandamos el javascript al cliente y el

play10:06

cliente tiene que

play10:08

renderizar según lo que haya llegado a

play10:11

nivel de javascript Sí entonces aquí hay

play10:14

algo que como que no cuadra ya vamos a

play10:16

ver qué es lo que lo soluciona O qué es

play10:17

lo que trata de solucionarlo

play10:22

vale ventajas y desventajas del server s

play10:24

rendering sí obviamente lo más llamativo

play10:28

de esto es que ya nos quitamos el

play10:29

problema del seo Por qué Porque estamos

play10:31

prer renderizando la parte html Así que

play10:34

el usuario tiene el contenido casi que

play10:36

instantáneamente sí Aunque no pueda

play10:39

interactuar con él le mostramos algo que

play10:41

esto es superimportante para los

play10:42

crawlers de los buscadores que tengamos

play10:45

Data inmediata y le mostremos algo al

play10:47

usuario aunque sea a nivel html sí nos

play10:51

ahorramos también peticiones desde el

play10:53

cliente Por qué Porque si estamos pre

play10:54

renderizando en el servidor nosotros

play10:56

podríamos por ejemplo hacer alguna

play10:58

consulta una base de de datos

play10:59

directamente vale o sea una Api que se

play11:01

conecte a la base de datos sí traernos

play11:03

Data PR renderizar esa Data y enviársela

play11:06

directamente al cliente en forma plana

play11:08

de html y ya está tenemos ahí datos y

play11:10

todo lo demás no tenemos que esperar a

play11:12

que el cliente nos haga otra petición a

play11:14

nosotros o al backen para enviarle la

play11:17

Data y para que el cliente pues vuelva

play11:19

otra vez a ejecutar javascript y pare de

play11:21

contar rerender y pues muestre la Data

play11:23

sí nos ahorramos ese

play11:27

pasillo ahora con respecto a las

play11:29

desventajas sí tenemos pues obviamente

play11:32

el tamaño de la aplicación eso siempre

play11:33

va a ser algo que pues dependiendo del

play11:35

contexto donde estemos Pues nos va a

play11:36

pesar más o menos sí sean al lado del

play11:39

servidor sean al lado del cliente Pero

play11:41

además Pero además aquí viene el meollo

play11:44

de la cuestión aquí viene el porqué de

play11:46

esta de esta charla o este vídeo sí la

play11:52

incompatibilidad con algunas librerías y

play11:54

apis propias del cliente propias del

play11:57

navegador cuando nosotros nosotros

play11:59

creamos una aplicación que es el caso

play12:01

justamente que detona este vídeo en

play12:04

específico cuando nosotros creamos una

play12:05

aplicación por ejemplo angular 17

play12:07

angular 17 ya directamente nos pregunta

play12:09

en el cli Si queremos habilitar servers

play12:12

rendering si le decimos que sí cuando

play12:14

nosotros levantemos esa aplicación esa

play12:16

aplicación se está PR renderizando un

play12:18

servidor de node con Express Sí

play12:22

ergo si yo trato de acceder a un objeto

play12:26

de local storage o un objeto window o un

play12:29

objeto document me va a dar error Sí por

play12:33

qué porque no estoy en el navegador

play12:34

estoy en un servidor de nodejs con

play12:36

Express vale Y esto no solamente puede

play12:40

darnos error en este tipo de objetos

play12:42

sino también algunas librerías que

play12:44

utilizan estos objetos vale por ejemplo

play12:46

librerías de gráficos librerías que

play12:49

almacenen pues estado en local storage

play12:51

en ses storage o lo que sea ven o que

play12:55

render a través de pues captura de nodo

play12:57

en el navegador

play12:59

Pues nos puede dar error si estamos en

play13:01

ser de rendering estamos tratando de

play13:03

utilizar en ese contexto me explico

play13:05

entonces ojo ojo con esto cuando ustedes

play13:08

estén haciendo algo de server Side

play13:09

rendering vale estén implementando esta

play13:12

estrategia para PR renderizar su web Sí

play13:15

tienen que tener en cuenta este tipo de

play13:17

cosas por qué porque van a tener que

play13:19

implementar pues algún workaround van a

play13:20

tener que validar En qué plataforma

play13:22

están por ejemplo angular De hecho tiene

play13:24

un par de cosillas puede inyectar si mal

play13:27

no recuerdo es plat for ID vale Y ahora

play13:30

en la versión 17 tienen otra cosa que es

play13:33

after next render bien donde pues

play13:36

Ejecutan digamos ese Hook y todo lo que

play13:38

esté dentro del after next render se

play13:41

entiende que se ejecuta de lado del

play13:42

cliente por lo tanto pueden acceder ahí

play13:45

a las apis propias de pues Windows

play13:47

document local storage y pare de contar

play13:52

entiende y otra cosa es que obviamente

play13:54

puede verse afectada la experiencia de

play13:56

usuario por velocidades lentas de

play13:57

conexión dado que cada ruta debe pasar

play13:59

por un request al servidor como tenemos

play14:01

un servidor ahí escuchando y el cliente

play14:03

va a pedirle Mira dame esta página Dame

play14:06

esta página prendería esta otra página

play14:08

envíame el html después envíame el

play14:10

javascript Pues si la conexión del

play14:11

usuario es lenta pues obviamente Aquí

play14:12

también tenemos un pequeño fleco de pues

play14:15

vas a tardar un poquillo más en Ver

play14:16

cosas vale esto pues

play14:20

mm es un poco relativo no a la conexión

play14:23

ya del usuario eh No podemos controlarlo

play14:25

todo Lamentablemente se entiende se

play14:29

entiende el el el porqué del error de lo

play14:32

queal storage con serv rendering y la

play14:34

diferencia con respecto a clide

play14:38

rendering vale por último tenemos otra

play14:42

estrategia llamada static site

play14:43

generation Sí y static site generation a

play14:47

menudo pues se puede confundir o o

play14:49

podemos relacionarla mucho con serve

play14:51

rendering hay una diferencia si se fijan

play14:54

cuando nosotros utilizamos ser rendering

play14:56

tenemos un servidor ahí ejecutándose por

play14:57

lo tanto el la parte de PR renderización

play15:00

el pre rendering ocurre en tiempo de

play15:03

request en tiempo de eh de ejecución

play15:07

porque el servidor se está ejecutando y

play15:08

es el cliente quien le pide una página

play15:10

Mira prerender esto y Envíamelo me

play15:13

explico cuando hablamos de static Side

play15:15

generation como es una generación de

play15:17

estáticos de un sitio ocurre en tiempo

play15:19

de construcción cuando nosotros hacemos

play15:21

el build es el mismo framework esto lo

play15:24

hace por ejemplo Astro sí eh Cuando

play15:27

hacemos el build es el mismo framework

play15:28

quién pues pre renderiza todo y nos

play15:31

lanza estáticos y elimina todo el

play15:33

javascript que sea e innecesario Sí por

play15:37

qué es innecesario Pues porque a veces

play15:39

eh lleva duplicación ya vamos a ver el

play15:40

tema de la duplicación Ah o pues ya

play15:43

básicamente Pues no sé tiene que por qué

play15:45

cargar en el cliente porque ya se pre

play15:46

renderizo ya se hicieron pues peticiones

play15:48

http o se hizo todo lo que se necesitaba

play15:51

ser a nivel de pues Mostrar datos bien

play15:54

me generó los estáticos a nivel de html

play15:56

y css Y eso es lo que yo despliegue

play15:59

vale Y ya está si yo hago un cambio en

play16:02

esta web con static Side generation

play16:04

tengo que generar otro build bien Y

play16:08

desplegar ese nuevo build Para yo poder

play16:09

ver el cambio no es como en servers

play16:11

rendering que tengo un servidor ahí

play16:13

ejecutándose y pues si yo quiero un

play16:15

cambio Pues nada lo Solicito y ya está

play16:17

el servidor pues lo procesa lo PR

play16:18

renderiza y me lo envía explico

play16:21

entonces este tipo de estrategia el

play16:24

static generation es ideal para por

play16:26

ejemplo

play16:27

portfolios inclusive eh temas de yo que

play16:31

sé cualquier otra web de contenido

play16:32

estático de hecho la web de programación

play16:34

en español está hecha con este esta

play16:37

estrategia porque de hecho está hecha

play16:38

con Astro vale Aunque Astro aquí mezcla

play16:40

algunas cosillas que ya vamos a

play16:43

ver Qué ventajas tiene el static Side

play16:46

generation sí obviamente la rapidez es

play16:49

una de las principales Por qué Porque ya

play16:52

que estamos generando todos los

play16:53

estáticos en tiempo de eh construcción

play16:55

vale el cliente va a ver el contenido

play16:58

inmediatamente porque son estáticos lo

play16:59

que tiene que Descargar es html y css

play17:01

ahí javascript no está pintando nada en

play17:03

el dom no estamos manipulando eh ningún

play17:06

nodo no estamos haciendo absolutamente

play17:07

más nada sino enviarle al cliente pues

play17:09

html y css Y eso es lo que ve vale Así

play17:11

que es muy muy ligero aquí pues también

play17:14

mantenemos la ventaja del seo porque al

play17:17

final son estáticos así que vamos a

play17:18

tener metadata por allí los crawlers van

play17:20

a ser felices y nosotros también

play17:21

obviamente y además e no tenemos en

play17:25

ciertos casos que hacer peticiones

play17:27

adicionales desde el cliente Por qué

play17:28

Porque si estamos PR renderizando todo

play17:30

en tiempo de construcción podemos eh PR

play17:32

renderizar datos vale que estemos

play17:35

sacando Pues yo que sé de una pie

play17:36

terceros o una base de datos o incluso

play17:38

de archivos estáticos vale generamos los

play17:41

estáticos a partir de aquí y lo

play17:43

mostramos así que pues ya no hay este

play17:45

este Tom Dame entre cliente y servidor

play17:47

me

play17:48

explico ahora como desventajas pues lo

play17:51

general la construcción del sitio puede

play17:52

verse lenta dependiendo del tamaño de la

play17:54

aplicación obviamente

play17:55

eh volvemos aquí al tema del la

play17:58

incompatibilidad con algunas librerías y

play18:00

iis propias de Pues el cliente Por qué

play18:03

Porque estamos generando estáticos si

play18:04

estamos eliminando el javascript no

play18:06

esperemos entonces que cuando nosotros

play18:09

interactuemos con la web pues la web

play18:11

reaccione de alguna manera porque es

play18:13

estática si es html y css porque de

play18:15

hecho estamos aquí quitando tratando de

play18:16

quitar el javascript y por lo tanto

play18:18

estamos evitando que se ejecute algo de

play18:19

lado del cliente Sí ya vamos a ver

play18:23

eh algo Cómo se llama un Matiz sobre

play18:26

esto vale Ah y además Pues otra cosa que

play18:31

se podría considerar desventaja es el

play18:33

tema de Pues los builds sí como ya les

play18:35

había comentado Si queremos hacer un

play18:37

cambio en la web sí tenemos que generar

play18:40

otro build porque estamos generándolo en

play18:42

tiempo de construcción estamos generando

play18:44

la web completa en tiempo de

play18:45

construcción así que pues hay que volver

play18:47

a ser un npm r build por ejemplo volver

play18:49

a copiar el dis llevarlo al servidor

play18:51

llevarlo a la ruta que específica del

play18:54

despliegue eh Cómo se llama esto

play18:56

reemplazar los archivos y pare de contar

play18:58

vale esto lo podemos hacer A través de

play19:00

un Chrome Job a través de la

play19:01

automatización perdón de despliegues que

play19:03

tienen tutoriales en YouTube

play19:05

Ah en mi canal de YouTube

play19:08

específicamente este Pero bueno se puede

play19:11

automatizar el procedimiento vale

play19:13

tampoco es que sea algo

play19:15

traumático ahora

play19:19

ahora hay algunas cosas ya las había

play19:22

mencionado antes eh temas de matices que

play19:24

vamos a tocar y tal Y qué sé yo hay

play19:26

algunas cosas que entran aquí en la

play19:28

ecuación fíjense que tanto service

play19:31

rendering como static generation son

play19:33

estrategias de pre rendering sí

play19:36

básicamente renderización del contenido

play19:39

previo a lo que es

play19:41

e enviárselo al cliente bien previo a

play19:44

que el navegador lo tenga vale para que

play19:48

el navegador lo que reciba sea ya todo

play19:50

el nodo del html pues construya su

play19:52

cuestión y ya lo muestre y ya está s

play19:54

Ahora hay estrategias para eh manejar un

play19:58

poquillo lo que es la interacción con

play20:01

con el dom sí o sea con interacción me

play20:04

refiero a pues reaccionar a un click

play20:06

reaccionar a un event listener utilizar

play20:08

local storage utilizar el objeto window

play20:10

utilizar document y pare de contar con

play20:12

ser rendering y statis generation

play20:16

vale vamos a ver aquí cómo funciona cada

play20:19

estrategia vamos a compararlas ya en un

play20:21

gráfico que tengo yo aquí aparte que ya

play20:22

se los hice Vale y vamos a ver de qué va

play20:25

la hidratación o

play20:28

vale que también lo pueden encontrar por

play20:31

ahí como Reconciliación o reconciliation

play20:34

Vale y hacia dónde apunta más o menos el

play20:37

futuro esto lo está implementando creo

play20:39

que quick y hay un par de frameworks hay

play20:42

uno de Google que ya lo implementado No

play20:43

recuerdo el nombre pero creo que Google

play20:45

photos de hecho y otra aplicación de

play20:46

Google están hecho con esto vale que

play20:49

implementan o están tratando de

play20:51

implementar resum ability vale vamos a

play20:53

ver de qué va Eso

play20:55

sí a ver les he hecho aquí un pequeño

play20:59

diagrama vamos a verlo me voy a poner Yo

play21:02

por aquí

play21:05

arriba para que se vea la cosa mejor sí

play21:08

ahí está les he hecho este pequeño estos

play21:12

pequeños diagramas vamos a comparar lo

play21:13

que hemos visto hasta el momento y vamos

play21:15

a ver el tema de hydration y el tema de

play21:18

resum ability s fíjense alg nosotros

play21:21

desarrollamos aquí volvemos al cli Side

play21:24

rendering cuando estamos desarrollando

play21:26

una spa Lo que sucede es lo siguiente el

play21:28

navegador primero muestra una página en

play21:29

blanco sí después ejecuta después de que

play21:34

descarga el bundle de javascript que es

play21:37

nuestra aplicación lo ejecuta y ese

play21:39

bundle hace el render de nuestros

play21:42

componentes visuales y ahí es cuando

play21:44

nuestra aplicación ya se vuelve

play21:46

interactiva Sí después que nosotros

play21:48

cargamos la aplicación de react de

play21:49

angular de View en el navegador el Bond

play21:52

del js se encarga de crear todo el árbol

play21:54

del dom sí de renderizar toda la web y

play21:57

ahí es cuando nosotros podemos comenzar

play21:59

a interactuar podemos darle a botones

play22:00

podemos enviar formularios podemos hacer

play22:02

y deshacer lo que nos dé la gana

play22:05

Sí cuando utilizamos una estrateg

play22:07

prerendering la cosa cambia fíjense lo

play22:10

que sucede aquí el servidor nos envía

play22:14

directamente al cliente html inicial

play22:16

solamente html inicial

play22:19

bien luego luego descargamos la parte de

play22:23

javascript Sí pero qué sucede cuando

play22:25

descargamos la parte de javascript que

play22:28

este html inicial sí tiene que ser

play22:33

reemplazado bien Por qué Porque la parte

play22:35

de javascript pues obviamente tiene pues

play22:37

event listeners tiene pues eventos

play22:39

clicks pues tiene una cantidad de cosas

play22:41

que pues obviamente se unen a los

play22:44

elementos del html Así que esto este

play22:46

árbol que hemos renderizado aquí ya no

play22:49

nos sirve sino que tiene que ser

play22:50

reemplazado con todo lo que implica la

play22:53

interacción con javascript Sí entonces

play22:56

aquí e primero que nada recibimos un

play23:00

html plano luego recibimos el javascript

play23:03

lo ejecutamos y aquí se vuelve a

play23:06

renderizar todo se renderiza entonces

play23:08

aquí existe una duplicación me explico

play23:11

por qué Porque estamos aquí realmente eh

play23:14

teniendo ciertos nodos html vale Y luego

play23:18

los estamos renderizando con el

play23:20

javascript que nos llega Entonces lo

play23:22

estamos renderizando en el servidor y

play23:23

después lo renderizando de nuevo en el

play23:24

cliente para reemplazar el html plano

play23:27

que nos llevó al principio

play23:28

Esto no

play23:29

es muy eficiente que se diga vale aquí

play23:33

es cuando entra el concepto de hydration

play23:36

sí o

play23:37

reconciliation de qué va eh la

play23:40

hidratación o el hydration de reutilizar

play23:44

los nodos que ya están aquí vale

play23:47

entonces yo tengo nodos comunes lo que

play23:49

me interesa es reemplazar aquellos nodos

play23:51

que no lo sean o de incrustar bien los s

play23:54

handlers o lo que sea que tengamos a

play23:56

nivel de interacción en los nodos que

play23:57

que ya existen en el cliente porque ya

play23:59

los recibimos bien no tenemos por qué

play24:01

reemplazar todo eso es

play24:03

hydration

play24:05

sí reutilizar justamente los nodos del

play24:09

dom Y a partir de allí ya nuestra web es

play24:13

interactiva

play24:15

Vale entonces aquí con eh hydration

play24:18

Tratamos de pues

play24:20

HM Cómo se llama aminorar la duplicación

play24:24

para

play24:25

eh primar lo que es la reutilización de

play24:28

estos nodos que ya recibimos porque

play24:30

repito ya tenemos html ahí o sea vamos a

play24:33

reutilizar los nodos y ya está me

play24:35

explico Ahora hay aparte de esto otro

play24:40

concepto que es resum ability en este

play24:43

caso resum ability trata de que

play24:45

e nos llega en desde un principio html

play24:49

del servidor con una porción mínima de

play24:52

javascript Sí para qué Para que la web

play24:54

sea interactiva de una vez vale Y qué va

play24:57

a pasar en paralelo que va a seguir

play25:00

descargando

play25:01

eh partes pequeñitas de javascript pero

play25:05

aquí se elimina la duplicación y cuando

play25:09

nos referimos a eliminar la duplicación

play25:10

nos referimos a que del pondel de

play25:12

javascript se elimina todo aquello sí

play25:16

que render cosas o nodos que ya tenemos

play25:20

realmente aquí en principio vale Así que

play25:22

este Bond del javascript va a ser mucho

play25:24

más pequeñito entonces descargarlo en

play25:26

paralelo no nos va a costar tanto y por

play25:28

lo tanto la web va a ser interactiva

play25:29

mucho más rápido y el usuario ni

play25:31

siquiera lo va a notar Vale entonces a

play25:34

esto apuntan frameworks como por ejemplo

play25:36

repetimos eh quick vale Y hay un par de

play25:39

frameworks eh Ya de de Google hay un

play25:42

framework de Google otro no recuerdo de

play25:44

quién era Ah que lo están implementando

play25:47

que lo están apuntando hacia Esto sí de

play25:50

momento Pues en las otras en los otros

play25:52

frameworks y librerías que tenemos hoy

play25:54

en día pues frameworks como next como

play25:56

nox como angular etcétera pues tenemos

play25:59

el tema de El hydration

play26:03

Vale ahora fíjense que podemos de hecho

play26:06

consultar esto directamente en la

play26:08

documentación por ejemplo de angular sí

play26:11

Y por qué consultar la documentación es

play26:13

importante s super importante fíjense lo

play26:17

que pasa aquí como se imaginarán si

play26:20

estamos aquí tratando de reutilizar con

play26:23

hydration los nodos que ya tenemos a

play26:25

nivel de html para poder justamente

play26:28

hacer esa Reconciliación y poder agregar

play26:30

interactividad sin tener que renderizar

play26:33

que destruir todos los nodos y volverlos

play26:35

a renderizar con javascript

play26:38

vale entre los nodos que hay

play26:41

aquí s y los nodos que hay

play26:45

aquí tiene que haber una concordancia

play26:47

para poder reutilizarlos Por qué Porque

play26:49

si lo que está aquí es diferente a lo

play26:50

que está aquí entonces necesariamente

play26:52

tengo que destruir y volver a renderizar

play26:54

vale Y eso lo ven aquí en entación de

play26:58

hecho vale

play27:00

eh Por ejemplo Aquí está en constraints

play27:05

vale

play27:07

Pam nos dice directamente tu aplicación

play27:09

debe tener el mismo la misma estructura

play27:12

del dom generada tanto en el servidor

play27:15

como en el cliente Sí por qué Porque el

play27:18

proceso de iteration espera el mismo

play27:20

árbol del dom eh a nivel estructural

play27:23

desde ambas partes para qué Para poder

play27:25

reutilizar esos mismos nodos si no la

play27:27

tiene tiene que renderizar vale Y aquí

play27:30

pues obviamente no lo va a hacer de

play27:31

forma automática sino que muy

play27:32

probablemente te da algún error sí Y

play27:35

esto mismo ocurre por ejemplo en react

play27:38

etcétera Cómo se trata de palear un poco

play27:41

esta esta parte pues con algo que se

play27:44

llama hidratación selectiva O selective

play27:47

hydration

play27:49

sí vamos ahí aparte de la documentación

play27:52

de angular para que tengamos varias

play27:54

fuentes hay un hlo aquí en el

play27:56

repositorio de react 18 sí

play27:59

Ah que está brutal o sea te explica la

play28:02

parte de serv rendering Sí en

play28:05

específicamente perdón el hilo es del

play28:06

suspense vale que se incorpora en en

play28:09

react 18 Sí y lo que nos permite el

play28:12

suspense es justamente esta hidratación

play28:14

selectiva

play28:16

vale de forma tal de que no tenemos que

play28:19

esperar a que se hidrate todo el el el

play28:23

árbol del dom vale sino que podemos

play28:25

hidratar ciertas partes para que la web

play28:27

cargue estáticos por un lado y cargue eh

play28:30

componentes o hidrate componentes

play28:32

interactivos por otro lado Sí y a los

play28:36

que han trabajado con Astro esto les

play28:37

debe sonar porque es el mismo concepto

play28:39

de Islas Ya lo vamos a ver pero fíjense

play28:42

la cosa Este hilo Me encantó o sea est

play28:45

esta discusión aquí en el repositorio Me

play28:46

encantó se las voy a pasar por aquí por

play28:47

el chat y si están viendo esto en

play28:48

YouTube se los dejo también en la

play28:49

descripción del vídeo porque es brutal o

play28:50

sea échenle un ojo vamos

play28:53

fíjense aquí

play28:55

eh La idea es Es que la web llegue a

play28:59

este punto lo más rápido posible Sí

play29:01

cuando tenemos este recuadro verde es

play29:03

porque toda la web es interactiva y ya

play29:04

está lista Vale entonces cuando hacemos

play29:08

client Side rendering lo primero que

play29:09

vemos ya les había dicho es la web en

play29:11

blanco en este caso cuando utilizamos

play29:13

serv rendering pues lo que vemos es

play29:16

contenido estático todavía no

play29:18

interactivo y cuando ya terminamos de

play29:19

hidratar pues tenemos ahora el contenido

play29:21

interactivo

play29:23

sí por aquí abajo por aquí abajo ya nos

play29:27

comienzan a hablar de selective

play29:30

hydration o hidratación selectiva Por

play29:32

qué Porque si se fijan el problema está

play29:35

en que hay un esquema de waterfall es

play29:38

decir una cosa no puede pasar sin que

play29:39

pase la anterior Sí cuando nosotros

play29:42

hacemos serv rendering hacemos el fetch

play29:45

de Data del hacia el server renderizando

play29:48

el html del servidor cargamos el código

play29:51

en el cliente e hidratamos hacia el

play29:53

cliente no podemos hidratar si el código

play29:55

no ha cargado no podemos eh cargar el

play29:57

código si no se renderiza el html y no

play29:59

podemos renderizar el html sin que se

play30:00

haya hecho el fetch de Data en el

play30:02

servidor me explico o sea es una cadena

play30:04

que va Pues paso por paso para que la

play30:06

cosa sea mucho más ágil si podamos

play30:08

renderizar cosas estáticas y cosas luego

play30:11

dinámicas de forma progresiva o de forma

play30:13

selectiva tenemos justamente el

play30:15

selective hydration vale esto en este

play30:18

caso react lo hace con el tema de por

play30:22

aquí lo dice vamos el tema de ya se me

play30:25

olvidó el suspens vale

play30:27

Sí y lo que marca el suspense es

play30:29

justamente un componente que podemos

play30:31

hidratar de forma selectiva todo lo

play30:33

demás se va fíjense renderizando de

play30:35

forma estática mientras que este

play30:37

componente Pues aquí puede cargar Por

play30:39

qué porque tiene interacción necesita

play30:40

interacción necesita pues cargar alguna

play30:42

cosilla

play30:44

Vale entonces este hilo está s super

play30:47

interesante y te explica Pues el tema

play30:49

del suspense para aquellos que trabajan

play30:50

con react y para aquellos que pues

play30:52

quieran también profundizar el concepto

play30:53

de lo que es selective hydration pues ya

play30:56

grandes ras os Lo acabamos de explicar

play30:58

Pero bueno si quieren leerse el hilo de

play30:59

verdad está muy interesante y está super

play31:01

recomendado vale fíjense aquí podemos

play31:03

tener incluso componentes eh Ya

play31:05

interactivos mientras que esto se está

play31:06

hidratando todavía vale suena que le

play31:10

estemos echando agua pero bueno de hecho

play31:12

la la traducción es así o sea estamos

play31:13

hidratando un eh Cómo se llama un don

play31:17

seco no O se un don plano vale por eso

play31:20

el nombre también

play31:22

Ah entonces entonces cuál podría ser un

play31:26

ejemplo de un componente con hidratación

play31:28

por ejemplo en este hilo ponen este

play31:30

componente como un listado de

play31:32

comentarios vale como tú puedes

play31:33

responder al comentario puedes editar el

play31:35

comentario puedes eliminar el comentario

play31:36

pues obviamente Debes tener interacción

play31:39

Vale entonces si por ejemplo tu naf eh

play31:42

tu sidebar y yo que sé tu title aquí no

play31:45

son eh No necesitas interacción para

play31:47

ellos pues obviamente no vas a bloquear

play31:50

la carga de estos estáticos por el tema

play31:52

de hidratar este componente nada más

play31:54

entonces lo que haces es cargar estos

play31:55

estáticos e hidratas de forma más

play31:57

selectiva este componente Vale entonces

play32:00

ya el usuario ve esto que es bastante

play32:03

mientras ve el loader de los comentarios

play32:05

hasta que esto se hidrata bien llega el

play32:07

html primero y después pum se hidrata y

play32:10

ya tienes interacción

play32:15

Vale y hablando de islas de Astro ya les

play32:18

había mencionado el tema de pues

play32:19

hidratación selectiva justamente eso es

play32:21

lo que implementa Astro vale vamos a ver

play32:24

cómo implementa eh esta parte astro eh

play32:28

Para también ver otro caso de estudio No

play32:30

fíjense aquí de hecho Astro mismo nos

play32:35

dice dónde

play32:39

está Okay Astro plantea Bueno sí una de

play32:44

las cosas que esto el concepto como tal

play32:46

de Islas no viene propiamente de Astro

play32:48

vale Ah De hecho viene el creador de

play32:50

prct pero Astro en este caso se hizo muy

play32:54

conocido por el tema de incluir el con

play32:57

concepto de Islas vale la idea general

play32:59

de esta arquitectura de Islas es

play33:01

renderizar páginas html en el servidor e

play33:03

inyectar placeholders o slots alrededor

play33:05

de regiones altamente dinámicas que

play33:07

luego pueden ser hidratadas en el

play33:09

cliente como pequeños widget

play33:12

autocontenidos reutilizando su html

play33:14

inicial renderizado en el servidor vale

play33:16

lo que acabamos de ver el concepto de

play33:17

hydration el tema está en que la

play33:20

pregunta del millón cuando cuando vemos

play33:23

por primera vez Astro es cómo hace esto

play33:26

sí para tener Pues un componente de

play33:28

react y pues una estructura de web

play33:31

totalmente estática cargar el componente

play33:33

de react y que la cosa lo haga Así bien

play33:36

es justamente a través de hidratación

play33:39

selectiva

play33:40

vale fíjense en contraste la mayoría de

play33:44

los frameworks web web Perdón basados en

play33:47

javascript hidrata y raliza un sitio web

play33:49

completo como una gran aplicación de

play33:51

javascript vale que es lo que estamos

play33:53

viendo esto Pues es lo que hacen las

play33:55

spas

play33:57

sin embargo sin

play33:59

embargo Pam Astro se hizo popular como

play34:02

el primer framework web de javascript

play34:04

con hidratación selectiva incorporada Y

play34:06

esto es lo que le permite hacer este

play34:08

tipo de Islas o implementar este tipo de

play34:10

Islas Vale entonces Qué es una isla en

play34:14

Astro que esto lo pueden ver también en

play34:15

la clase de Astro que tenemos aquí en el

play34:16

canal de YouTube una isla se refiere a

play34:19

cualquier componente de interfaz de

play34:20

usuario interactivo en la página Vale

play34:24

entonces por ejemplo Tenemos aquí el

play34:25

encabezado de una página que puede ser

play34:27

una isla interactiva un Carrusel de

play34:29

imágenes que también lo puede ser

play34:30

mientras que la barra lateral el

play34:31

contenido estático y el pie de página

play34:33

Son totalmente estáticos sí Y cómo sabe

play34:37

Astro Qué es lo que tiene que cargarle

play34:38

lado del cliente y qué es lo que tiene

play34:39

que cargar del servidor porque claro

play34:40

Astro ya no O sea Astro puedes hacer

play34:44

servers de rendering con Astro cuidado

play34:46

Vale pero Astro nace como un static Side

play34:49

generator vale o como un framework con

play34:51

static s generation Mejor dicho sí

play34:54

Ah entonces cómo le decimos nosotros a

play34:56

asro Mira mantenme este javascript para

play34:58

que se cargue el cliente Mientras que el

play35:01

resto Mira te puedes volar el javascript

play35:03

del resto y me lo generas los estáticos

play35:05

y ya está Vale justamente con las

play35:07

directivas de Astro Como por ejemplo

play35:09

Esta client sí Si nosotros le ponemos

play35:12

aquí a un componente de react que se

play35:14

cargue en el cliente a través de esta

play35:16

directiva Astro deja el javascript ahí

play35:18

cuando el javascript se carga al lado

play35:20

del cliente pues ahí el componente hace

play35:21

lo que tiene que hacer es decir

play35:23

renderiza el dom a partir del javascript

play35:26

que tiene el componente vale esto lo

play35:28

podemos hacer así repito con static Side

play35:31

generation o también podemos implementar

play35:32

por aquí eh tenemos la documentación de

play35:35

el server rendering pero ya con Astro

play35:37

vale e incluso Astro nos permite eh

play35:40

combinar cosillas Aquí sí entonces

play35:43

seleccionar componentes para client Side

play35:46

rendering y seleccionar componentes para

play35:48

seride rendering Y pues obviamente todo

play35:50

lo demás para static generation es decir

play35:52

es bastante versátil con respecto a

play35:54

formas de renderizado bien bien tenemos

play35:58

por aquí pues nada beneficios de las

play36:00

Islas etcétera lo interesante de Astro

play36:02

es entender esto para saber el Cómo

play36:04

podemos justamente jugar un poco con

play36:07

dónde cargamos qué Y cuándo cargamos Qué

play36:11

bien y sobre todo sobre todo repito esta

play36:15

esta pequeña explicación esta pequeña

play36:17

charla que les he preparado para el día

play36:18

de hoy viene para que entendamos En qué

play36:22

contexto estamos usando Qué cosa s

play36:25

Porque si estamos repito utilizando algo

play36:28

con una estrategia de server Side

play36:30

rendering no podemos pretender tener a

play36:32

la mano o a disposición apis que no

play36:35

están en el servidor sino que está en el

play36:37

cliente entonces eh si vamos a utilizar

play36:40

local Host si vamos a utilizar Pues el

play36:42

objeto window el objeto document o lo

play36:44

que sea tenemos que estar conscientes de

play36:46

que tenemos que validar primero que

play36:48

estamos en la plataforma correcta es

play36:49

decir que estamos en el navegador Sí

play36:51

cada framework o pues incluso podemos

play36:54

hacer workarounds allí con javascript

play36:56

vale para identificar Bueno mira estoy

play36:58

en el navegador Pues bien Ahora yo puedo

play37:00

utilizar aquí local storage no estoy en

play37:02

el navegador pues puedo incluso crear mi

play37:04

propio grapper mi propia implementación

play37:05

de local storage bien para que no de

play37:08

error y si estamos en el navegador pues

play37:09

simple y llanamente igual o esa ese

play37:12

objeto que yo mismo estoy creando que yo

play37:13

mismo estoy implementando al objeto real

play37:16

que es storage vale del navegador y ya

play37:19

pues ya me probé mis mis métodos y no ha

play37:21

pasado nada me explico es decir tenemos

play37:24

que entender bien qué es lo que estamos

play37:25

haciendo Y en qué contexto lo estamos

play37:26

haciendo para poder jugar bien eh con lo

play37:28

que tenemos a disposición

play37:32

vale

play37:34

Okay continuamos por aquí

play37:38

Eh Eh Eh Dónde está el rollo este

play37:47

de la pregunta del millón la pregunta el

play37:51

millón Cuándo usamos

play37:52

qué pero claro ahora mismo hay mucha

play37:55

gente Eh y el IP siempre nos come sobre

play37:58

todo en el mundo de desarrollo de

play37:59

software el I Es algo es como el salseo

play38:01

alimenta nuestras almas Entonces cuando

play38:04

utilizamos cli rendering Perdón aquí

play38:07

esto me culpa

play38:10

Vale cuando utilizamos client Side

play38:13

rendering sí cuándo utilizamos serv

play38:17

rendering Y cuándo deberíamos utilizar

play38:18

static Side generation esto no está

play38:21

escrito en piedra son recomendaciones

play38:23

generales vale ustedes pueden ya según

play38:27

su contexto decidir una u otra cosa Vale

play38:29

cli Side rendering es ideal para

play38:32

sistemas sobre todo internos Sí es muy

play38:35

común utilizar pues aplicaciones

play38:37

eh directamente renderizadas en el

play38:40

cliente en el navegador vale con angular

play38:41

con react con View con spelt con lo que

play38:44

sea sí en sistemas que son por ejemplo

play38:47

sistemas internos de empresas sistemas

play38:48

que no necesitan de un posicionamiento

play38:51

en buscadores porque realmente eh Cómo

play38:54

se llama esto no no no interesa que

play38:56

estén indexados no O por lo menos no es

play38:58

prioritario esos sistemas que están

play39:01

detrás de alguna plataforma o algún

play39:03

sistema de login bien de permisología

play39:07

eh sistemas de gestión de cuentas de

play39:09

usuario sistemas de e-commerce los

play39:11

sistemas internos el e-commerce por

play39:13

ejemplo vale o sea en él le interesa que

play39:14

que que tu panel de control de tu

play39:17

e-commerce aparezca en Google como la

play39:19

primera cosa no O sea mal asunto

play39:21

entonces todo este tipo de cosas son

play39:23

candidatas a Pues desarrollarse con c eh

play39:26

rendering sí cuándo le podemos sacar

play39:30

provecho al server rendering cuando ya

play39:32

la cosa cambia cuando necesitas ya seo s

play39:36

cuando necesitas pues tener esos

play39:37

estáticos porque necesitas que tu página

play39:39

o tu aplicación web se indexe bien

play39:43

entonces el contenido de la web aparte

play39:45

cambia menudo es decir esto podríamos

play39:47

verlo en relación con esto anterior vale

play39:49

igual podemos utilizar pues o podemos

play39:52

tener un un e-commerce vale o podemos

play39:57

tener yo que sé la página de un banco la

play39:59

página de un seguro o cualquier otra

play40:01

cosa con login de usuarios con

play40:03

permisología con lo demás pero la parte

play40:05

pública sí que nos interesa que se

play40:06

indexe por lo tanto tiene que tener

play40:08

estáticos tiene que tener metadata tiene

play40:09

que tener todo este tipo de cosas pues

play40:10

esa parte pública la podríamos hacer con

play40:12

serv rendering por ejemplo sí Y además

play40:15

tenemos allí el tema de que como estamos

play40:17

directamente en el servidor y el

play40:19

servidor se está ejecutando pues tenemos

play40:20

ahí una conexión a Pues un Api de

play40:22

terceros o directamente a la base de

play40:24

datos Y tal Y podemos hacer consultas

play40:26

previas antes de enviarle al cliente

play40:28

pues lo que necesita sí a nivel de

play40:32

dom con respecto al static Side

play40:35

generation Pues en este caso pues lo

play40:38

podemos utilizar cuando el contenido de

play40:40

lo que sea que estemos desarrollando

play40:42

pues no cambie demasiado vale

play40:44

Ah ni depende del usuario que lo está

play40:47

consultando es decir no depende de un

play40:49

login no depende de una sesión no

play40:51

depende de

play40:53

eh variables varias que estemos

play40:55

controlando el lado del cli cliente

play40:56

entiendase local stor stor y pare de

play40:58

contar vale por ejemplo un blog personal

play41:02

De hecho el blog de promoción español lo

play41:04

voy a ser con Astro Vale y va a ser con

play41:06

static High

play41:07

generation la página de programación en

play41:09

español está hecha en Astro bien con

play41:11

static High generation eso no es un

play41:13

servidor ejecutándose ni mucho menos

play41:15

Ah el portfolio si quieren hacer un

play41:17

portfolio pues lo pueden hacer estático

play41:19

o sea no necesitan un servidor ahí

play41:20

ejecutándose para que le prerender algo

play41:22

o sea simple llanamente pues generan su

play41:24

estático y ahí está vale A menos que

play41:27

pues ya quieran no sé tener permisos o o

play41:29

alguna cosilla allí que necesiten

play41:31

ejecutar al cliente pues ya saben que

play41:33

Astro les ha da la opción de tener

play41:34

ciertos componentes que se pueden

play41:35

ejecutar al cliente y pare de contar

play41:37

Vale entonces estos serían algunos de

play41:40

los casos de uso en los que pueden

play41:42

aplicar tanto client Side rendering como

play41:44

server Side rendering o static site

play41:46

generation

play41:48

sí pregunto mi gente bonita qué les

play41:52

preció qué tal lo ven qué tal lo ven

play41:54

fíjense que cambió un poquito el formato

play41:55

para hacer un poco más no sé

play41:58

estructurado o entretenido no sé si les

play42:00

gustó la presentación si me dicen Mira

play42:01

Pedro Olvídate las presentaciones y dale

play42:03

como explicas como siempre pues no pasa

play42:05

nada vamos este pero déjenmelo saber por

play42:08

aquí en el chat y si estás viendo esto

play42:09

en YouTube Pues en los comentarios

play42:10

también eh

Rate This

5.0 / 5 (0 votes)

Related Tags
DesarrolloWebRenderizadoServidorRenderizadoClienteGeneraciónEstaticaSEOOptimizaciónAplicacionesWebFrameworksWebPerformanceWebInteracciónDOMContentStrategies
Do you need a summary in English?