Una Saga de Problemas de Renderizado Web

Rate this content
Bookmark

Esta charla analizará la evolución de los modos de renderizado web y de qué se trata el movimiento Jamstack. Construiremos un proyecto de demostración para mostrar cómo se pueden combinar un generador de sitios estáticos y un CMS sin cabeza para crear historias dinámicas y atractivas, manteniendo al mismo tiempo los beneficios de rendimiento y escalabilidad de un sitio estático.

Aprenderás sobre las ventajas y limitaciones de cada modo de renderizado y obtendrás una comprensión más profunda de cómo utilizar Jamstack para construir experiencias de narración poderosas y dinámicas.

This talk has been presented at Vue.js London 2023, check out the latest edition of this JavaScript Conference.

FAQ

El renderizado del lado del cliente ocurre cuando el sitio web se renderiza en el navegador del usuario final utilizando JavaScript. Los beneficios incluyen menor costo al no usar servidores para el renderizado, una mejor experiencia de usuario desde la primera carga, y un mejor soporte sin conexión.

Los principales problemas incluyen una mala experiencia en la primera carga si no se utiliza la división de código, problemas de accesibilidad si el JavaScript está deshabilitado en el navegador del usuario, y desafíos con la optimización para motores de búsqueda (SEO) debido a que los rastreadores no pueden esperar a que JavaScript renderice completamente el contenido.

El renderizado del lado del servidor implica generar el HTML de la página en el servidor antes de enviarlo al usuario. Este método mejora el rendimiento en la carga inicial, optimiza el SEO al permitir que los rastreadores accedan directamente al contenido, y aumenta la seguridad al mantener los tokens de API en el servidor.

La generación de sitios estáticos consiste en crear páginas web durante el tiempo de compilación que luego se almacenan en una CDN. Los beneficios incluyen un rendimiento rápido, menor costo, optimización de SEO desde la primera carga, y una alta seguridad al realizar todas las operaciones en tiempo de compilación.

Los principales desafíos incluyen la falta de interactividad y problemas con la autorización de usuarios y el procesamiento de datos en escenarios dinámicos. Además, el tiempo de construcción puede ser considerablemente largo, especialmente para sitios grandes, lo que puede retrasar actualizaciones y cambios.

La regeneración estática incremental es una técnica que permite actualizar solo las partes del sitio que han cambiado, en lugar de regenerar el sitio completo. Esto reduce los tiempos de construcción, admite datos dinámicos y asegura que los usuarios siempre vean la versión más reciente del contenido.

Jamstack es una arquitectura que desacopla la capa de experiencia web (frontend) de los datos y la lógica empresarial (backend), utilizando tecnologías como JavaScript, APIs y Markup. Facilita la escalabilidad, la flexibilidad y el rendimiento al construir sitios estáticos alojados en la nube.

Alba Silvente Fuentes
Alba Silvente Fuentes
28 min
12 May, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Esta charla analiza los problemas que se enfrentan al construir y renderizar aplicaciones web, los diferentes métodos y estrategias de renderizado, y los beneficios de la arquitectura Yamstack. Cubre el renderizado en el lado del servidor, la generación de sitios estáticos, la regeneración estática incremental y el renderizado en el borde. El orador demuestra cómo construir un sitio estático utilizando un CMS Hello y la arquitectura JAMstack. Otros temas incluyen la conexión de Storyboard con una aplicación Nuxt, datos simulados, renderizado híbrido y manejo de I18N con un generador de sitios estáticos.
Available in English: A Saga of Web Rendering Woes

1. Introducción a los Métodos y Estrategias de Renderizado

Short description:

En esta charla, discutiré los problemas que enfrentamos al construir y renderizar aplicaciones web, los diferentes métodos y estrategias de renderizado utilizados, y los beneficios de la arquitectura Yamstack. También demostraré cómo construir un sitio estático con un Hello CMS en solo dos minutos. La historia de los métodos de renderizado comienza con la hospedaje de archivos estáticos y gradualmente incorporando servidores y tecnologías de backend. Los frameworks como Vue, React, Asphalt y Angular introdujeron el renderizado del lado del cliente, donde el sitio web se renderiza en el navegador del usuario utilizando JavaScript. Este enfoque ofrece ahorro de costos, una mejor experiencia de usuario y un mejor soporte sin conexión. Sin embargo, tiene desventajas como una mala experiencia en la primera carga, problemas de accesibilidad y desafíos con la optimización para motores de búsqueda. A pesar de estos desafíos, los rastreadores de búsqueda ahora pueden renderizar sitios basados en JavaScript.

Entonces, hola a todos. Estoy muy contento de estar aquí y espero que disfruten la charla que daré hoy. Mi objetivo principal hoy es contarles todos los problemas que enfrentamos al construir sitios, al renderizar nuestras aplicaciones web, que terminamos teniendo una variedad de métodos de renderizado web para usar en la actualidad, y les mostraré la historia detrás de ellos. Entonces, lo principal que quiero que se lleven de esta charla es una visión general de los métodos y estrategias de renderizado que usamos en la actualidad para renderizar aplicaciones JavaScript, comprender en qué consiste la arquitectura Yamstack y los beneficios que conlleva. Y aprender cómo construir un sitio estático con un Hello CMS en solo dos minutos. Así que esta historia puede comenzar con otro personaje principal que no sea el sitio web. Hemos estado construyendo sitios web durante mucho tiempo, casi tanto como yo, y comenzamos simplemente hospedando algunos archivos estáticos en la nube, y después de un tiempo, comenzamos a crear servidores con PHP u otras tecnologías de backend, y comenzamos a combinarlos para tener una mejor aplicación con más datos en ella y no solo un archivo estático. Pero los desarrolladores del ecosistema JavaScript comenzaron a decidir que tal vez queremos tener aplicaciones más interactivas que ayuden al usuario final a interactuar con algo, como un formulario o algo más sofisticado. Así es cuando los frameworks como Vue, React, Asphalt o Angular comenzaron a crear nuevos métodos. Y este fue el renderizado del lado del cliente. Básicamente, el sitio web ahora se renderiza en el navegador, básicamente en el dispositivo del usuario final, lo que llamamos el cliente, utilizando JavaScript. Entonces, cuando un usuario ingresa a su sitio, descargará un esqueleto HTML que proporciona una URL a un script, una carga útil que descargarán y ejecutarán para renderizar su aplicación. Básicamente, ahora tiene un proceso que renderizará la aplicación dentro de la computadora portátil de su usuario. Los beneficios de usar este método son bastante obvios, es más económico porque no tenemos ningún servidor, todo se hace en el cliente a través de JavaScript. Tenemos una mejor experiencia de usuario en la aplicación, porque ahora cuando navegan ya tienen todo desde la primera carga. Y cuando navegan entre páginas, solo verán algunas cargas y recuperaremos algunos datos de las APIs. Así es como trabajamos. Y luego tendremos un mejor soporte sin conexión, si capturamos todo en el navegador del usuario, porque no tenemos ninguna llamada a la API, imagina que solo tienes una aplicación con algunas cosas, luego tendrán todo sin conexión a Internet. Pero, ¿qué sucedió? Por supuesto, cada método de renderizado que veremos tendrá algunas desventajas. El primero fue la mala experiencia en la primera carga. Entonces, cuando descargas el sitio web por primera vez, si no tienes la división de código y tienes todo en una carga grande, tomará mucho tiempo cargar solo una página. No era óptimo para un uso a largo plazo. El otro punto al que nos enfrentamos fue la accesibilidad. Si algunas personas tenían JavaScript deshabilitado en el navegador porque algunas personas lo hacen, suena extraño en la actualidad, pero hay muchas personas que intentan navegar sin JavaScript. Entonces, este no era un método de renderizado si nuestros usuarios no tenían JavaScript habilitado. Pero el verdadero problema en esta historia fue el villano, la optimización para motores de búsqueda, el SEO. Básicamente, los rastreadores de búsqueda cuando los clientes están renderizando aquí arriba, no tienen el tiempo adecuado para esperar a que el JavaScript renderice su sitio. Entonces, en la primera interacción, no ven ningún contenido allí. Eso fue un problema. Y, por supuesto, hoy en día ellos

2. Renderizado del lado del servidor y Generación de sitios estáticos

Short description:

El renderizado del lado del servidor permite enviar HTML prellenado al usuario, mejorando el rendimiento, el SEO y la seguridad. Sin embargo, las conexiones lentas y la carga del servidor pueden ser desafíos. La generación de sitios estáticos resuelve estos problemas al generar páginas durante el tiempo de compilación y almacenarlas en una CDN.

lo cambió y ahora pueden renderizar nuestro sitio en los rastreadores de búsqueda. Pero, ¿qué sucedió? No esperarán para siempre. Entonces, si tu rendimiento no está bien, no esperarán a que se renderice tu página y no se indexará en los motores de búsqueda. Entonces, ¿cuál fue la solución a esto? Nuestro próximo héroe, el renderizado del lado del servidor. El renderizado del lado del servidor comenzó con NAX, NAX, y todos estos meta-frameworks que están por encima de los frameworks que usamos. Y básicamente se trata de renderizar el HTML de nuestra página web en el servidor antes de enviarlo al usuario final. Entonces, ahora cuando descargamos una página al ingresar una URL, descargaremos el HTML prellenado al principio. Y lo que hacen estos frameworks es simplemente crear una aplicación universal que, en segundo plano, también descargará el JavaScript y lo ejecutará para volver a renderizar tu página mientras navegas. Entonces, obtienes los beneficios del renderizado del lado del cliente, pero la carga inicial será realmente eficiente. Y ese es uno de los beneficios. Mejoramos el rendimiento en la carga inicial porque básicamente tenemos el HTML prellenado. Tenemos un mejor SEO porque ahora los motores de búsqueda no necesitan esperar mucho tiempo para que se cargue la página porque es solo la primera página. Y luego, mejoramos la seguridad porque todo lo que necesitamos llamar a las APIs, los tokens de API estarán en el servidor, por lo que no necesitas tener los tokens de API en tu cliente. Eso es realmente genial. Pero, ¿qué sucede con esto? Por supuesto, si estábamos usando el renderizado del lado del servidor en tiempos antiguos, no teníamos la interactividad que tenemos hoy en día con la aplicación universal que proporciona Next y Next. Pero hoy en día, eso ya no es un problema. El problema es que tenemos conexiones malas y lentas. Entonces, básicamente, si estás en Nigeria y tu servidor de datos está en América, tendrás, realmente, una mala métrica para el tiempo de primer byte, el Core Web Vital. Entonces, básicamente, tomará mucho tiempo cargar para algunas personas, así que eso no es bueno. Pero el verdadero villano aquí fue el aumento de la carga del servidor. Ahora, exige más rendimiento a los servidores para generar el HTML porque ellos son los encargados de eso. Y el número de servidores era mucho mayor porque ahora cada vez que un usuario ingresa a tu sitio por primera vez, llamarán al servidor, y eso significa dinero para el negocio. Entonces, si no tienes un sitio web que tenga datos reales o tal vez algo que esté cambiando con el tiempo, tal vez no quieras esta solución porque no está hecha para tu sitio. Imagina un editor o un periódico. Tal vez solo tengan contenido estático. Ahí es donde entra en juego el próximo héroe. Entonces, básicamente, ahora tenemos una generación de sitios estáticos. Un generador de sitios estáticos genera páginas durante el tiempo de compilación. Entonces, cuando desarrollamos nuestro código y lo enviamos a nuestra nube, básicamente, ejecutamos un proceso que generará la página y esa página se almacenará en caché y se guardará en la CDN. La CDN es una red de entrega de contenido que está cerca del usuario final. Tiene múltiples nodos en todo el mundo.

QnA

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

Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Acelerando tu aplicación React con menos JavaScript
React Summit 2023React Summit 2023
32 min
Acelerando tu aplicación React con menos JavaScript
Top Content
Mishko, the creator of Angular and AngularJS, discusses the challenges of website performance and JavaScript hydration. He explains the differences between client-side and server-side rendering and introduces Quik as a solution for efficient component hydration. Mishko demonstrates examples of state management and intercommunication using Quik. He highlights the performance benefits of using Quik with React and emphasizes the importance of reducing JavaScript size for better performance. Finally, he mentions the use of QUIC in both MPA and SPA applications for improved startup performance.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
El Futuro de las Herramientas de Rendimiento
JSNation 2022JSNation 2022
21 min
El Futuro de las Herramientas de Rendimiento
Top Content
Today's Talk discusses the future of performance tooling, focusing on user-centric, actionable, and contextual approaches. The introduction highlights Adi Osmani's expertise in performance tools and his passion for DevTools features. The Talk explores the integration of user flows into DevTools and Lighthouse, enabling performance measurement and optimization. It also showcases the import/export feature for user flows and the collaboration potential with Lighthouse. The Talk further delves into the use of flows with other tools like web page test and Cypress, offering cross-browser testing capabilities. The actionable aspect emphasizes the importance of metrics like Interaction to Next Paint and Total Blocking Time, as well as the improvements in Lighthouse and performance debugging tools. Lastly, the Talk emphasizes the iterative nature of performance improvement and the user-centric, actionable, and contextual future of performance tooling.
Optimización de juegos HTML5: 10 años de aprendizaje
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Optimización de juegos HTML5: 10 años de aprendizaje
Top Content
PlayCanvas is an open-source game engine used by game developers worldwide. Optimization is crucial for HTML5 games, focusing on load times and frame rate. Texture and mesh optimization can significantly reduce download sizes. GLTF and GLB formats offer smaller file sizes and faster parsing times. Compressing game resources and using efficient file formats can improve load times. Framerate optimization and resolution scaling are important for better performance. Managing draw calls and using batching techniques can optimize performance. Browser DevTools, such as Chrome and Firefox, are useful for debugging and profiling. Detecting device performance and optimizing based on specific devices can improve game performance. Apple is making progress with WebGPU implementation. HTML5 games can be shipped to the App Store using Cordova.
RedwoodJS: El marco de aplicación React Full-Stack de tus sueños
React Summit Remote Edition 2021React Summit Remote Edition 2021
43 min
RedwoodJS: El marco de aplicación React Full-Stack de tus sueños
Top Content
Redwood JS is a full stack React app framework that simplifies development and testing. It uses a directory structure to organize code and provides easy data fetching with cells. Redwood eliminates boilerplate and integrates Jest and Storybook. It supports pre-rendering and provides solutions for authentication and deployment. Redwood is a cross-client framework that allows for building web and mobile applications without duplicating work.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
React a Escala con Nx
React Summit 2023React Summit 2023
145 min
React a Escala con Nx
Top Content
Featured WorkshopFree
Isaac Mann
Isaac Mann
Vamos a utilizar Nx y algunos de sus plugins para acelerar el desarrollo de esta aplicación.
Algunas de las cosas que aprenderás:- Generar un espacio de trabajo Nx prístino- Generar aplicaciones frontend React y APIs backend dentro de tu espacio de trabajo, con proxies preconfigurados- Crear librerías compartidas para reutilizar código- Generar nuevos componentes enrutados con todas las rutas preconfiguradas por Nx y listas para usar- Cómo organizar el código en un monorepositorio- Mover fácilmente las librerías alrededor de tu estructura de carpetas- Crear historias de Storybook y pruebas e2e de Cypress para tus componentes
Tabla de contenidos: - Lab 1 - Generar un espacio de trabajo vacío- Lab 2 - Generar una aplicación React- Lab 3 - Ejecutores- Lab 3.1 - Migraciones- Lab 4 - Generar una librería de componentes- Lab 5 - Generar una librería de utilidades- Lab 6 - Generar una librería de rutas- Lab 7 - Añadir una API de Express- Lab 8 - Mostrar un juego completo en el componente de detalle de juego enrutado- Lab 9 - Generar una librería de tipos que la API y el frontend pueden compartir- Lab 10 - Generar historias de Storybook para el componente de interfaz de usuario compartido- Lab 11 - Prueba E2E del componente compartido
Construyendo aplicaciones web que iluminan Internet con QwikCity
JSNation 2023JSNation 2023
170 min
Construyendo aplicaciones web que iluminan Internet con QwikCity
Featured WorkshopFree
Miško Hevery
Miško Hevery
Construir aplicaciones web instantáneas a gran escala ha sido elusivo. Los sitios del mundo real necesitan seguimiento, análisis y interfaces y interacciones de usuario complejas. Siempre comenzamos con las mejores intenciones pero terminamos con un sitio menos que ideal.
QwikCity es un nuevo meta-framework que te permite construir aplicaciones a gran escala con un rendimiento de inicio constante. Veremos cómo construir una aplicación QwikCity y qué la hace única. El masterclass te mostrará cómo configurar un proyecto QwikCity. Cómo funciona el enrutamiento con el diseño. La aplicación de demostración obtendrá datos y los presentará al usuario en un formulario editable. Y finalmente, cómo se puede utilizar la autenticación. Todas las partes básicas para cualquier aplicación a gran escala.
En el camino, también veremos qué hace que Qwik sea único y cómo la capacidad de reanudación permite un rendimiento de inicio constante sin importar la complejidad de la aplicación.
Next.js 13: Estrategias de Obtención de Datos
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Estrategias de Obtención de Datos
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introducción- Prerrequisitos para la masterclass- Estrategias de obtención: fundamentos- Estrategias de obtención – práctica: API de obtención, caché (estática VS dinámica), revalidar, suspense (obtención de datos en paralelo)- Prueba tu construcción y sírvela en Vercel- Futuro: Componentes de servidor VS Componentes de cliente- Huevo de pascua de la masterclass (no relacionado con el tema, destacando la accesibilidad)- Conclusión
Depuración del Rendimiento de React
React Advanced 2023React Advanced 2023
148 min
Depuración del Rendimiento de React
Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Veía una interacción lenta, probaba una optimización aleatoria, veía que no ayudaba, y seguía probando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Hacía una grabación en Chrome DevTools o React Profiler, la examinaba, intentaba hacer clic en cosas al azar, y luego la cerraba frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos cómo analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, cubriremos el rendimiento de interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Problemas difíciles de GraphQL en Shopify
GraphQL Galaxy 2021GraphQL Galaxy 2021
164 min
Problemas difíciles de GraphQL en Shopify
WorkshopFree
Rebecca Friedman
Jonathan Baker
Alex Ackerman
Théo Ben Hassen
 Greg MacWilliam
5 authors
En Shopify a gran escala, resolvemos algunos problemas bastante difíciles. En este masterclass, cinco oradores diferentes describirán algunos de los desafíos que hemos enfrentado y cómo los hemos superado.

Tabla de contenidos:
1 - El infame problema "N+1": Jonathan Baker - Vamos a hablar sobre qué es, por qué es un problema y cómo Shopify lo maneja a gran escala en varios APIs de GraphQL.
2 - Contextualizando APIs de GraphQL: Alex Ackerman - Cómo y por qué decidimos usar directivas. Compartiré qué son las directivas, qué directivas están disponibles de forma predeterminada y cómo crear directivas personalizadas.
3 - Consultas de GraphQL más rápidas para clientes móviles: Theo Ben Hassen - A medida que tu aplicación móvil crece, también lo harán tus consultas de GraphQL. En esta charla, repasaré diversas estrategias para hacer que tus consultas sean más rápidas y efectivas.
4 - Construyendo el producto del futuro hoy: Greg MacWilliam - Cómo Shopify adopta las características futuras en el código actual.
5 - Gestión efectiva de APIs grandes: Rebecca Friedman - Tenemos miles de desarrolladores en Shopify. Veamos cómo estamos asegurando la calidad y consistencia de nuestras APIs de GraphQL con tantos colaboradores.