¿JavaScript Atómico Compilado?

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Bookmark
GithubProject website
Rate this content

¿Podemos aplicar las lecciones de CSS a JavaScript?

Mientras trabajamos en StyleX usamos la compilación y la técnica Atomic CSS para crear un sistema más eficiente. Tener pequeñas reglas CSS atómicas maximiza la reutilización y reduce drásticamente el tamaño del CSS a escala. Un compilador potente hace que el proceso sea automático y libera de tener que pensar en DSLs personalizados. 

¿Podemos hacer lo mismo para JavaScript? ¿Cuáles serían las compensaciones? ¿Puede resultar en beneficios únicos no posibles con la mayoría de los otros enfoques?

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

Naman Goel
Naman Goel
22 min
13 Jun, 2025

Comments

Sign in or register to post your comment.
Video Summary and Transcription
En 2008, la película Vantage Point inspiró la exploración de diversas perspectivas en el desarrollo de software. La evolución del CSS tradicional a estilos atómicos en StyleX y la ventaja de escalabilidad de JavaScript atómico son áreas de interés significativas. Repensar el renderizado del lado del servidor con React, Web Components y el marco Hano introduce nuevas posibilidades para componentes interactivos. Los elementos personalizados, Shadow DOM y el marco Solenoid abordan desafíos en el alcance de CSS y SSR para HTML más ligero. Las funciones de señal en Solenoid ofrecen un enfoque único para la gestión de datos y el desarrollo de componentes, mejorando la eficiencia de la aplicación. La configuración interactiva en tiempo real del servidor, el desarrollo innovador del lado del servidor y el uso de HTML como fuente de verdad contribuyen a la velocidad y eficiencia del proyecto. La depuración, la definición de componentes, la transmisión de HTML y el uso de componentes destacan la naturaleza declarativa y las capacidades de transmisión del HTML generado por el servidor.
Available in English: Compiled Atomic JavaScript?

1. Explorando StyleX y Atomic JavaScript

Short description:

En 2008, la película Vantage Point mostró diversas perspectivas. StyleX, una solución de CSS y JS en tiempo de compilación, ofrece estilos atómicos optimizados. La ventaja de escalabilidad de Atomic CSS sobre el CSS tradicional es significativa. ¿Puede Atomic JavaScript replicar este éxito en el ámbito de JavaScript?

En 2008, hubo una película llamada Vantage Point. Era una historia contada desde muchas perspectivas diferentes, y ves cómo las diferentes perspectivas pueden ser muy diferentes entre sí y contarte diferentes historias. Pero luego, cuando las juntas todas, puede surgir algo nuevo. De todos modos, soy Naman, trabajé en Meta durante ocho años. Y durante los últimos cuatro a cinco años, estuve trabajando en StyleX. Entonces, ¿qué es StyleX? Es una solución de estilo CSS y JS, pero es en tiempo de compilación, por lo que no hay inyección de estilo en tiempo de ejecución. Produce una hoja de estilos atómica altamente optimizada, similar a Tailwind. Yo diría que es una de las mejores soluciones de estilo que existen, mucho mejor que Tailwind. Hay algunas otras que la gente no conoce, pero eso no viene al caso. Independientemente, el punto importante es que el concepto de Atomic CSS está ganando. Pero no siempre fue así. Hubo un largo tiempo en el desarrollo web donde los paquetes cargados de manera diferida eran ubicuos. Teníamos paquetes específicos de ruta de CSS, los cargábamos de manera diferida a medida que navegábamos por las páginas, usábamos extensiones de sintaxis como Sassless, y usábamos arquitecturas como BEM y OOCSS, que en realidad era algo que teníamos que aprender, y no había herramientas para ello. Pero luego llegó Atomic CSS y cambió completamente la ecuación. Y la razón por la que tuvo tanto éxito es que simplemente escala mejor. En lugar de que tu CSS crezca con el número de componentes, donde simplemente obtienes CSS más y más grande, con Atomic CSS, después de un tiempo, tu CSS simplemente deja de crecer. Y como resultado, puedes tener un pequeño paquete de CSS cargado todo al frente. No necesitas cargar más CSS de manera diferida. Tu HTML se vuelve un poco más grande, claro. Tienes más nombres de clase. Pero en general, un HTML más grande sigue siendo mucho más barato que un archivo CSS más grande. Y a escala, te das cuenta de cómo un archivo CSS grande puede convertirse en un cuello de botella de rendimiento, que de otro modo no notarías. Así que comencé a pensar, ¿podemos hacer también Atomic JavaScript y cambiar la ecuación en el mundo de JavaScript?

2. Rethinking Server-Side React and Web Components

Short description:

He usado React durante 12 años, explorando el renderizado del lado del servidor hasta los componentes recientes orientados al servidor. ¿Pueden los componentes del servidor ser interactivos? La simplicidad de HTMX atrae, pero carece de estructura declarativa y consistencia de componentes. Profundizando en JSX, el marco Hano y el Shadow DOM de Web Components para el aislamiento de estilos.

He estado usando React durante los últimos 12 años, y comencé a usarlo para el renderizado del lado del servidor. Pasé por React Create class, componentes de clase ES6, componentes de función con componentes de orden superior, Redux, y luego Hooks. Pero luego, este gran cambio ocurrió recientemente, llamado RSCs. Y RSCs de alguna manera voltearon el modelo de React, donde ahora todo es orientado al servidor. Los datos son orientados al servidor. Comenzamos a pensar, ¿por qué enviar componentes al cliente si la salida siempre va a ser estática? Podemos tener un paquete de cliente más pequeño si gran parte de nuestra UI puede ser representada con datos o marcado en esta situación. Todavía podemos tener componentes de cliente para la interactividad.

Así que comencé a pensar, ¿pueden los componentes del servidor ser interactivos por sí mismos? Hola, soy Naman, y no soy fan de HTMX. Pero hay algunas cosas que todavía me parecen interesantes al respecto. Así que este es un demo muy simple de HTMX, y lo que me gusta de él es que la lógica de tu aplicación está justo ahí en el HTML. No hay JavaScript extra para cargar, no hay paquetes adicionales. Todo se reduce a algo muy simple, muy eficiente, en términos de los datos que tienen que cargarse en el navegador. Pero también, HTMX tiene lógica imperativa por todas partes. Estás actualizando cosas por IDs y inner HTML y outer HTML. No hay un sistema declarativo para hacer un seguimiento de todo y no hay componentes, no hay flujo de datos consistente.

Eventualmente, comienza a sentirse como jQuery con pasos adicionales. Pero luego también, por otro lado, JSX puede usarse sin React. Y hay un marco de servidor llamado Hano. Es un competidor de Express, que tiene soporte de primera clase para JSX, pero solo para renderizar HTML regular. Y así comencé a pensar, ¿podría hacer un modelo de componente declarativo que genere algo como HTMX? Hola, soy Naman, y no soy un gran fan de Web Components. Pero he estado investigando las APIs, buscando algo de valor en todo eso que hemos construido y puesto en los navegadores. Así que comencé a mirar qué son los Web Components, qué compone los Web Components. Así que la primera cosa de la que todos hablan, porque es la parte más controvertida, es Shadow DOM. Shadow DOM te da aislamiento de estilos. Ese es su gran valor. Cualquier CSS fuera del Shadow DOM no se aplica al mockup dentro del Shadow DOM, y cualquier CSS dentro del Shadow DOM no afecta nada fuera de él. Pero ahora tenemos Atomic CSS. No tenemos conflictos. No necesitamos este alcance de CSS en la mayoría de los casos.

QnA