NgZone vs ChangeDetectorRef (CDR) in Angular
Both NgZone and ChangeDetectorRef (CDR) help with change detection, but they serve different purposes.
🔹 NgZone
NgZone is a service that controls how Angular detects changes globally across the application. It helps manage execution inside or outside Angular's change detection system.
✅ When to Use NgZone
?
- Running non-Angular events (like
setTimeout
, WebSockets, or third-party libraries) inside change detection. - Skipping change detection for performance (e.g., animations, timers).
🔹 Key Methods:
run(callback)
→ Forces Angular to detect changes.runOutsideAngular(callback)
→ Runs code outside change detection (for performance).
Example:
🟢 Using NgZone.run()
to trigger change detection
🚀 Using runOutsideAngular()
to improve performance
🔹 ChangeDetectorRef (CDR)
ChangeDetectorRef (CDR) is a service that allows manual control of change detection at the component level instead of affecting the entire application.
✅ When to Use ChangeDetectorRef
?
- Manually triggering change detection when Angular doesn't detect changes.
- Detaching and reattaching change detection to improve performance.
- Fixing issues in
OnPush
change detection strategy.
🔹 Key Methods:
detectChanges()
→ Manually triggers change detection for the component.markForCheck()
→ Marks the component for the next change detection cycle.detach()
→ Stops change detection for the component.reattach()
→ Re-enables change detection for the component.
Example:
🟢 Using detectChanges()
to force change detection
🚀 Using detach()
to improve performance
🔸 NgZone vs CDR: Key Differences
Feature | NgZone 🌀 | ChangeDetectorRef 🛠|
---|---|---|
Scope | Global (application-wide) | Component-level |
Purpose | Controls execution inside/outside Angular's change detection | Manages when and how a component detects changes |
Performance Impact | Can prevent unnecessary change detection for performance | Can pause/resume change detection for a specific component |
Best Use Cases | Handling async tasks (WebSockets, setTimeout , external libraries) | Manually controlling or optimizing change detection for components |
🔹 When to Use Which?
✅ Use NgZone
when dealing with external async operations (e.g., WebSockets, timers, third-party libraries).
✅ Use ChangeDetectorRef
when optimizing component rendering (e.g., detaching detection for better performance).
No comments:
Post a Comment