Одной из наиболее частых причин утечек памяти в Angular являются
незавершённые подписки на Observable потоки, такие как
HttpClient, EventEmitter или сторонние
библиотеки.
interval,
fromEvent).ngOnDestroy и ручная отпискаexport class ExampleComponent implements OnDestroy {
private subscription: Subscription;
constructor(private service: DataService) {
this.subscription = this.service.getData().subscribe(data => console.log(data));
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
takeUntil с Subjectprivate destroy$ = new Subject<void>();
ngOnInit() {
this.service.getData()
.pipe(takeUntil(this.destroy$))
.subscribe(data => console.log(data));
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
Использование async в шаблоне автоматически управляет
подпиской и отпиской:
<div *ngIf="data$ | async as data">{{ data }}</div>
Subscription.add для нескольких
подписокprivate subscriptions = new Subscription();
ngOnInit() {
this.subscriptions.add(this.service.getData().subscribe());
this.subscriptions.add(this.service.getOtherData().subscribe());
}
ngOnDestroy() {
this.subscriptions.unsubscribe();
}
Chrome DevTools) для
анализа памяти.ngOnInit.Соблюдение этих практик позволяет поддерживать производительность приложений, предотвращать перегрузку памяти и обеспечивать корректную работу Angular-приложений при длительной эксплуатации.