Signals-Based Frameworks Gain Traction
Developer interest in signals-based reactivity patterns continues to grow as an alternative to React's virtual DOM. Some developers are porting projects to SolidJS for performance, while others find Preact signals to be a lightweight and easy-to-adopt solution. In the enterprise space, recent Angular updates support gradual migration by bridging legacy reactive forms with its new signals-based forms.
- The signals pattern itself is not new; it appeared over a decade ago in early frameworks like Knockout.js before the virtual DOM became the dominant paradigm. SolidJS, created by Ryan Carniato, was instrumental in re-popularizing signals as a modern, high-performance alternative to the virtual DOM. - React's answer to the performance benefits of signals is the React Compiler (formerly "React Forget"), which automatically memoizes components and hooks at build time. Instead of developers manually using `useMemo` and `useCallback`, the compiler analyzes the code and injects these optimizations, aiming to prevent unnecessary re-renders without changing React's core rendering model. - The core difference between the two patterns is how they track changes: signals operate on a "push" model of fine-grained reactivity, where a state change directly notifies and updates only the specific DOM elements that depend on it. In contrast, the virtual DOM uses a "pull" model, where a state change causes the component and its children to re-render, creating a new virtual tree that is then "diffed" against the old one to find what to update in the actual DOM. - Performance benchmarks comparing a signals-based framework like SolidJS to a VDOM-based one like React have shown that signals can significantly reduce DOM mutations, memory usage, and update latency, especially in data-heavy applications. This is because the cost of an update with signals is proportional to what actually changed, not the size of the component tree that might have changed. - Other major frameworks are also adopting signal-like reactivity to move away from the overhead of a virtual DOM. Vue is developing an opt-in "Vapor Mode" that compiles components to a more efficient output using signals, which can completely drop the VDOM runtime from the application bundle. - While Preact Signals and SolidJS Signals share a common inspiration, their APIs differ; Solid's `createSignal` returns a getter and setter pair, similar to React's `useState`, while Preact uses a mutable `.value` property on the signal object. Preact's signals are designed to be framework-agnostic, whereas Solid's are deeply integrated into its rendering system, which is built entirely around fine-grained reactivity without a VDOM. - In Angular, the adoption of signals is a key part of the roadmap to enable zoneless applications. This will allow Angular to perform highly optimized, fine-grained change detection by tracking dependencies through signals, eventually removing the need for the Zone.js library that currently handles change detection automatically.