Angular Firebase应用在20个小时后崩溃,并具有+1 GB的内存分配

问题描述 投票:6回答:1

[我发现使用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堆相应地增加。

enter image description here

导致内存泄漏的代码:

[我发现使用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多个小时,因此由于此问题,现在无法使用。我迫切需要一个解决方案。

angular firebase angularfire
1个回答
1
投票
此错误应已在Firebase v7.5.0中修复,请参阅#1121,请检查package-lock.json以确认您使用的版本正确。如果不确定,请重新安装firebase软件包。

如果仍然出现内存泄漏,可以尝试通过禁用身份验证状态持久性,并通过将其添加到组件中来查看它是否停止了内存泄漏。

ngOnInit() { this.auth.auth.setPersistence('none') }

© www.soinside.com 2019 - 2024. All rights reserved.