我发现使用 AngularFireAuthModule
from '@angular/fire/auth';
会导致内存泄漏,导致20小时后浏览器崩溃。
版:
我对所有软件包都使用ncu -u进行了更新的最新版本。
角火: "@angular/fire": "^5.2.3",
Firebase版本: "firebase": "^7.5.0"
,
繁殖方法:
我在StackBliztz编辑器上制作了最少的可复制代码
这是直接测试错误的链接StackBlizt测试
症状:
您可以检查自己代码是否无效。它只是打印你好世界。但是,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多个小时,因此由于此问题,现在无法使用。我迫切需要一个解决方案。