相关疑难解决方法(0)

Angular Firebase 应用程序在 20 小时后崩溃,内存分配为 +1 GB

我发现使用AngularFireAuthModulefrom '@angular/fire/auth';会导致内存泄漏,导致 20 小时后浏览器崩溃。

版本:

我使用今天更新的最新版本,对所有软件包使用 ncu -u。

角火: "@angular/fire": "^5.2.3",

Firebase 版本: "firebase": "^7.5.0",

如何重现:

我在StackBliztz 编辑器上做了一个最小的可重现代码

这里是直接测试bug的链接StackBlizt test

症状:

您可以自己检查代码是否没有任何作用。它只是打印 hello world。但是,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: …
Run Code Online (Sandbox Code Playgroud)

firebase angularfire angular

16
推荐指数
1
解决办法
758
查看次数

JavaScript监听器不断增加

我实现了一个Web应用程序,并使用谷歌开发人员工具监控性能.我注意到听众不断增加,堆也是如此.

在此输入图像描述

听众增加的部分看起来像这样

let ival = $interval(function () {
    $http.get('someurl') // this call is actually done through a service, don't know if that matters
}, 1000)
Run Code Online (Sandbox Code Playgroud)

我会理解,如果堆增长是因为一些数据没有被垃圾收集器收集,但我不明白为什么听众会增加?

这是一个可重复的,最小的例子:

index.html文件:

<!doctype html>
<html ng-app="exampleModule">
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
    <script src="script.js"></script>
  </head>
  <body>
    <div ng-controller="someController">
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

和script.js文件:

angular.module("exampleModule", [])
  .controller("someController", [ "$http", "$interval", function ($http, $interval) {

    $interval(function () {
      $http.get('script.js')
    }, 1000)

  }])
Run Code Online (Sandbox Code Playgroud)

观看演奏时的结果与上图中的相同.您应该使用简单的Web服务器来发出GET请求.

javascript google-chrome listeners angularjs

1
推荐指数
1
解决办法
618
查看次数