0 Tage Serie
javascript / expert
Snippet

Optimierung externer Bibliothekslogik außerhalb von NgZone

NgZone (Zone.js) fängt asynchrone Operationen ab, um die Änderungserkennung auszulösen. Das Ausführen von Hochfrequenz-Logik (wie Mausbewegungen oder Chart-Animationen) innerhalb von 'runOutsideAngular' verhindert unnötige globale Change-Detection-Zyklen und verbessert die Reaktionsfähigkeit der Anwendung bei der Integration von Nicht-Angular-Bibliotheken erheblich.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Component({ ... })
export class ChartComponent implements OnInit {
constructor(private zone: NgZone, private el: ElementRef) {}
ngOnInit() {
this.zone.runOutsideAngular(() => {
// Third-party library doing heavy DOM manipulation or timers
const chart = new HeavyChartLibrary(this.el.nativeElement);
chart.on('render', () => {
console.log('Rendering...');
});
});
}
}
angular
Erklärung
1
this.zone.runOutsideAngular(() => { ... })
Führt den Codeblock aus, ohne den Änderungserkennungsmechanismus von Angular auszulösen.
2
new HeavyChartLibrary(...)
Stellt sicher, dass interne Timer/Events der Bibliothek nicht den UI-Check der gesamten App aufwecken.