Signals: La reactividad que impulsa a Solid y Vue

Fuentes: Signals, the push-pull based algorithm — Willy Brauner

Este artículo de Willy Brauner profundiza en el funcionamiento interno de los Signals, un mecanismo de reactividad que impulsa frameworks modernos como Solid y Vue. Los Signals permiten crear aplicaciones donde los cambios en los datos se propagan automáticamente a través de dependencias, similar a una hoja de cálculo donde las celdas dependientes se actualizan automáticamente.

La idea de Signals se remonta a la programación reactiva de los años 70, formalizada como un paradigma que describe sistemas donde los cambios en las fuentes de datos se propagan a través de un grafo de cálculos. Knockout.js y RxJS fueron pioneros en la implementación de estas ideas en JavaScript.

El núcleo de Signals reside en un algoritmo 'push-pull'. El enfoque 'push' (o evaluación ansiosa) funciona como un patrón de 'publish-subscribe': cuando un Signal cambia, notifica a todos sus suscriptores. Es importante destacar que no se envía el valor del estado, sino una notificación de que el estado ha cambiado. Esto evita la propagación innecesaria de datos.

El enfoque 'pull' entra en juego con los 'computed'. Los computeds son funciones derivadas reactivas que calculan valores basados en Signals o computeds. Son 'lazy', es decir, se invalidan cuando sus dependencias cambian, pero solo se reevalúan cuando se leen. Esto permite optimizar el rendimiento al evitar cálculos innecesarios. Además, los computeds rastrean automáticamente sus dependencias, eliminando la necesidad de declarar explícitamente las dependencias como se hace en React con arrays de dependencias.

La 'magia' de Signals radica en la forma en que los computeds se vinculan a los Signals. El sistema rastrea automáticamente qué Signals se acceden durante la ejecución de un computed, lo que simplifica el desarrollo y reduce la posibilidad de errores. La implementación de este rastreo automático y el sistema de caché son áreas de complejidad que el artículo promete explorar más adelante. En resumen, Signals ofrecen una forma poderosa y elegante de gestionar la reactividad en aplicaciones web, simplificando el desarrollo y mejorando el rendimiento.