我发现使用AngularFireAuthModule
中的'@angular/fire/auth';
会导致内存泄漏,导致20小时后浏览器崩溃。
版本:
对于所有软件包,我都使用ncu -u今天更新的最新版本。
Angular Fire:"@angular/fire": "^5.2.3",
Firebase版本:"firebase": "^7.5.0"
,
如何复制:
我在StackBliztz editor上做了一个最低限度的可复制代码
这里是直接测试错误的链接StackBlizt test
症状:
您可以检查自己代码是否无效。它只是打印你好世界。但是,Angular App使用的JavaScript内存增加了 11 kb / s (Chrome任务管理器CRTL + ESC)。
在打开浏览器10个小时后,使用的内存大约达到 800 mb (内存占用大约是 1.6 Gb 的两倍!)结果,浏览器内存不足,chrome标签页崩溃了。
在“性能”选项卡下使用chrome的内存配置文件进行了进一步研究之后,我清楚地注意到侦听器的数量每秒增加2,因此JS堆相应地增加。
导致内存泄漏的代码:
我发现使用AngularFireAuthModule
模块会导致内存泄漏,无论它是注入到component
构造函数中还是注入到service
中。
import { Component } from '@angular/core';
import {AngularFireAuth} from '@angular/fire/auth';
import {AngularFirestore} from '@angular/fire/firestore';
@Component({
selector: 'app-root',templateUrl: './app.component.html',styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'memoryleak';
constructor(public auth: AngularFireAuth){
}
}
问题:
这可能是FirebaseAuth实施中的错误,我已经打开了Github问题,但我正在寻找此问题的解决方法。我迫切需要一个解决方案。我不介意即使跨选项卡的会话未同步。我不需要那个功能。我在某处读过
如果您不需要此功能,则Firebase V6 模块化工作将允许您切换到localStorage 具有用于检测交叉表的更改的存储事件,并且可能会 使您能够定义自己的存储接口。
如果这是唯一的解决方案,那么如何实现呢?
我只需要任何能够阻止这种不必要的监听器增加的解决方案,因为它会降低计算机的速度并导致我的应用程序崩溃。我的应用程序需要运行20多个小时,因此由于此问题,现在无法使用。我迫切需要一个解决方案。