Я хочу реализовать функцию обнаружения утечки памяти при изменении маршрутизации.
С помощью этого фрагмента:
const getMemory = () => (window.performance as any).memory.usedJSHeapSize / (window.performance as any).memory.jsHeapSizeLimit;
Идея в том, что я получаю текущее использование памяти на NavigationStart
и сравните это с использованием памяти на NavigationEnd
, разница в утечке памяти.
Целью является обнаружение некоторых вещей, таких как подписка без подписки.
Пример:
import { Component } from '@angular/core';
import { Router, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';
@Component({
selector: 'my-app',
template: `
<div class="container">
<a routerLinkActive="active" routerLink="/login">Login</a> |
<a routerLinkActive="active" routerLink="/home">Home</a> |
<a routerLinkActive="active" routerLink="/catalog">Catalog</a>
<router-outlet></router-outlet>
</div>
`,
})
export class AppComponent {
private memoryStart = 0;
constructor(private router: Router){
const getMemory = () => (window.performance as any).memory.usedJSHeapSize / (window.performance as any).memory.jsHeapSizeLimit;
this.router.events.subscribe((event: any) => {
switch (true) {
case event instanceof NavigationStart: {
this.memoryStart = getMemory();
break;
}
case event instanceof NavigationEnd: {
console.log('Memory leak', (getMemory() - this.memoryStart));
break;
}
case event instanceof NavigationCancel:
case event instanceof NavigationError: {
break;
}
default: {
break;
}
}
});
}
}
Верно ли мое мнение?