Enfrentando la Crisis Existencial del Frontend

Rate this content
Bookmark

El estado del desarrollo frontend en los últimos años es un lugar extraño tanto para el desarrollador web no iniciado como para el experto. ¿Server Components? ¿Resumability? ¿Hydration? ¿Waterfalls? ¿Islands? ¿Por qué tanto enfoque en el agua? ¿Y por qué estamos hablando de esto? En esta charla, el creador de SolidJS, Ryan Carniato, explora el panorama del desarrollo web moderno para entender cómo llegamos aquí y qué soluciones realmente resuelven estos problemas.

This talk has been presented at React Summit 2024, check out the latest edition of this React Conference.

Ryan Carniato
Ryan Carniato
37 min
14 Jun, 2024

Comments

Sign in or register to post your comment.
  • Haris Khan
    Haris Khan
    Schiphol
    Transcription is wrong, it's from create react app talk

Video Summary and Transcription

Estoy honrado de estar aquí hoy. La última década ha estado dominada por las single-page apps. Cargar JavaScript es aproximadamente 35 veces más lento que las imágenes en dispositivos de gama baja. El server rendering implica enviar más JavaScript y HTML, aumentando la carga útil y el esfuerzo. React fue desarrollado para aplicaciones complejas, pero las necesidades comerciales han empujado hacia sitios web más simples. Las métricas para probar frameworks incluyen los costos de ejecución de código, el tamaño del bundle y el tamaño de la carga útil. Islands, popularizado por frameworks como Astro y Fresh, dividen las aplicaciones en secciones para el server rendering. La solución de React es usar islands y comunicarse en un formato de diffing. Quik reduce la ejecución de código y el tamaño, eliminando la doble serialización. Frameworks como Solid Start proporcionan herramientas para el server rendering en un paquete ligero. Los frameworks de WASM han mejorado en rendimiento. Next.js partial pre-rendering y HTMX ofrecen soluciones para sitios con menos interactividad.

1. Introduction to Front-end Technology

Short description:

Estoy honrado de estar aquí hoy. La última década ha estado dominada por aplicaciones de una sola página. El tamaño de las herramientas de las páginas web ha crecido, especialmente JavaScript, que es uno de los activos más costosos por byte. Cargar JavaScript byte por byte es aproximadamente 35 veces más lento que las imágenes en dispositivos de gama baja.

Estoy increíblemente honrado de estar aquí hoy. No esperaba estar abriendo una conferencia de React desde el principio, tengo que decir eso. Pero sí, en realidad no estoy hablando específicamente sobre Solid. Si quieres escuchar más sobre Solid, escucha la charla de Achille un poco más tarde.

Hoy, vamos a hablar mucho sobre tecnología front-end. Creo que probablemente es seguro decir que parece que mucho ha estado cambiando en los últimos años y no fue hace tanto tiempo que la web cumplió 30 años. Así que podría ser un poco temprano para una crisis de la mediana edad, pero definitivamente se siente así.

La verdad es que la forma en que hemos desarrollado en la web ha cambiado bastante dramáticamente cada década que ha existido, y es bastante justo decir que la última década ha estado dominada en gran medida por aplicaciones de una sola página. Puedes decirlo por todos los desarrolladores de React aquí hoy. Pero las aplicaciones de una sola página redefinieron cómo veíamos la construcción en la web. Nos dieron la capacidad de ver la web no solo como un modelo cliente-servidor, sino como una aplicación, casi como móvil. Podíamos construir experiencias que no requerían hacer estas recargas de página completa y al confiar en el renderizado en el navegador, sin embargo, cuando el CEO de una empresa detrás de posiblemente el marco de trabajo de React más grande del mundo hace un comentario como este, la gente tiene que preguntarse, ya sabes, ¿qué está pasando aquí?

No debería sorprender que con el tiempo el tamaño de las herramientas de las páginas web haya crecido. Hemos añadido más interactividad, más imágenes, más estilo, más de prácticamente todo. Esperamos que brinde las experiencias a las que estamos acostumbrados, ¿verdad? En realidad, estoy bastante contento de que existan todos estos gráficos. No tuve que hacer ninguno de estos. Esto es del álbum web. Gran material. El tamaño en nuestra página viene en muchas formas, HTML, CSS, JavaScript. JavaScript no es lo más grande en la página. Solo suele representar alrededor de un tercio en promedio. Pero es en lo que nos vamos a centrar un poco hoy, porque resulta ser uno de los activos más costosos por byte. Me encanta que haya tantos diagramas existentes para esto. Esto es del artículo de Addy Osmani sobre el costo de JavaScript de hace varios años. Es un clásico. Si nunca lo has leído, deberías leerlo. La idea principal es que tomó un dispositivo de gama baja en una red de gama baja, y mostró en ese entonces, creo que fue en 2018, que cargar JavaScript byte por byte era aproximadamente 35 veces más lento que las imágenes, solo por el tiempo de análisis y ejecución. Esto es en un Moto G4 o algo así. Creo que todavía están por ahí hoy. Esto es de Alex Russell. Tenía este gráfico donde mostraba que en el lado de los dispositivos de gama baja, las cosas no han subido de la misma manera que otras.

2. Challenges of Client vs Server Rendering

Short description:

Cuando tienes un sitio renderizado por el cliente, estás haciendo un viaje de ida y vuelta al servidor de inmediato. Pero el renderizado en el servidor también tiene sus desafíos, ya que implica enviar más JavaScript y HTML para hidratar la página. Esto aumenta la carga útil y el esfuerzo.

Es casi como retroceder en el tiempo ocho años. No me malinterpretes, esto podría no ser para tus clientes, puede que no necesites preocuparte por nada de esto, pero ha comenzado a centrarse en esto, diría yo, desde alrededor de 2020, ¿verdad? Y la gran parte de esto es que cuando tienes un sitio que se renderiza por el cliente, como una aplicación de una sola página, estás haciendo un viaje de ida y vuelta al servidor de inmediato. Envías el HTML y tienes la etiqueta de script que dice cargar mi JavaScript. La mayoría de las veces estás haciendo otro viaje de ida y vuelta al servidor, estas cascadas, que aprenderemos que no son algo bueno, básicamente múltiples antes de que incluso puedas ver el contenido principal de la página.

Así que pensamos, está bien, vamos a renderizarlo en el servidor. Te saltas todo eso y ves el contenido de inmediato. Pero esa no es el final de la historia. Todos estos son diagramas antiguos. Me encanta esto. Solo quédate conmigo, llegaré a un punto en algún momento. Pero hay ese tiempo entre cuando ves la página y cuando puedes interactuar con ella. Lo llaman el valle inquietante. Es porque cuando renderizas una página en el servidor, en realidad terminas enviando más JavaScript generalmente, no menos JavaScript. Es un poco confuso, pero ahora necesitas poder hidratar la página y renderizar la página. No solo envías más JavaScript, en realidad envías más HTML. Tu carga útil en realidad se hace más grande porque ahora tienes esta cosa encantadora en tu página. No me estoy burlando de Next.js aquí. Cada framework tiene esto. El blob de datos de Next, o el blob de datos de Svelte, o Remix, o Solid Start, no importa. Todos escupimos este enorme trozo de datos, así que enviamos todo al navegador dos veces. Una vez como datos, una vez como HTML. Así que sí, lo vemos de inmediato, pero ahora en realidad hemos duplicado nuestro esfuerzo prácticamente en todas partes.

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

SolidJS: ¿Por qué tanto Suspense?
JSNation 2023JSNation 2023
28 min
SolidJS: ¿Por qué tanto Suspense?
Top Content
Suspense is a mechanism for orchestrating asynchronous state changes in JavaScript frameworks. It ensures async consistency in UIs and helps avoid trust erosion and inconsistencies. Suspense boundaries are used to hoist data fetching and create consistency zones based on the user interface. They can handle loading states of multiple resources and control state loading in applications. Suspense can be used for transitions, providing a smoother user experience and allowing prioritization of important content.
SOLIDifica Tu Código React
React Day Berlin 2023React Day Berlin 2023
11 min
SOLIDifica Tu Código React
Clean code is easily understood, readable, changeable, extensible, and maintainable. SOLID principles enforce good practices for scalable and maintainable software. The Single Responsibility Principle (SRP) ensures that components have a single reason to change. The Open-Close Principle (OCP) allows components to be easily extended without modifying the underlying source code. The Liskov Substitution Principle (LSP) enables swapping child elements within a subtype component. The Interface Segregation Principle (ISP) states that components should only depend on the props they actually use.
SolidStart 1.0: Echando un vistazo bajo el capó
React Summit 2024React Summit 2024
30 min
SolidStart 1.0: Echando un vistazo bajo el capó
SolidStart is an efficient, unopinionated, and ergonomic full-stack framework that provides great defaults and flexibility. It includes features such as a bundler, a serializer, a server, and a router. The serializer, Seroval, enables streaming and real-time state synchronization between server and client. SolidStart offers powerful file routes, RPCs, and single-flight mutations. It is recommended for building UIs in full applications, Spark, single-page apps, and native apps.