Angular: найти утечку памяти при изменении маршрута - PullRequest
0 голосов
/ 18 июня 2020

Я хочу реализовать функцию обнаружения утечки памяти при изменении маршрутизации.

С помощью этого фрагмента:

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;
            }
          }
        });
  }
}

Верно ли мое мнение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...