With the full release of Angular Signals, I’m confused about whether I should replace all my RxJS Observables. For a large enterprise dashboard, does switching to Signals actually improve performance, or is it just syntactic sugar? How do Signals handle complex asynchronous data streams compared to the traditional async pipe?
3 answers
Signals aren't meant to replace RxJS; they are meant to complement it. Signals provide "fine-grained reactivity," meaning Angular can update just the specific part of the DOM that changed without checking the entire component tree. This is a massive win for performance in complex UIs. Use Signals for synchronous state (like UI toggles or form values) and keep RxJS for asynchronous streams (like HTTP requests or WebSockets). In Angular 18, you can easily bridge them using toSignal() and toObservable(), giving you the best of both worlds.
Are you planning to go completely zoneless once the migration is finished, or are you just looking to simplify the change detection?
Start with toSignal for your template bindings. It reduces the need for the async pipe and simplifies the component logic significantly.
I agree with David. Using toSignal is the most "low-risk, high-reward" entry point. It instantly makes your templates cleaner and more readable for the rest of the dev team.
That is a great question, Michael! Going zoneless with provideExperimentalZonelessChangeDetection() is the ultimate goal for many, but for an enterprise app, I’d suggest staying with Zone.js initially. You can still use Signals to reduce the number of components marked for check. This way, you get the performance boost without the risk of breaking third-party libraries that still rely on NgZone.