[我发现使用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 Task Manager 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多个小时,因此由于此问题,现在无法使用。我迫切需要一个解决方案。
package-lock.json
以确认您使用的版本正确。如果不确定,请重新安装firebase
软件包。如果仍然出现内存泄漏,可以尝试通过禁用身份验证状态持久性,并通过将其添加到组件中来查看它是否停止了内存泄漏。
ngOnInit() {
this.auth.auth.setPersistence('none')
}