AngularFireAuthModule
from を使用する'@angular/fire/auth';
と、メモリリークが発生し、20時間後にブラウザがクラッシュすることがわかりました。
バージョン:
私はすべてのパッケージにncu -uを使用して今日更新された最新バージョンを使用します。
角火: "@angular/fire": "^5.2.3",
Firebaseバージョン: "firebase": "^7.5.0"
、
再現方法:
StackBliztzエディターで最小限の再現可能なコードを作成しました
StackBliztテストを直接バグをテストするためのリンクは次のとおりです
症状:
コードが何も実行しないことを確認できます。Hello Worldを出力するだけです。ただし、Angularアプリで使用されるJavaScriptメモリは11 kb / s増加します(ChromeタスクマネージャーCRTL + ESC)。ブラウザーを開いたまま10時間後、使用されるメモリは約800 MBに達します(メモリフットプリントは1.6 Gbの約2倍です)。
その結果、ブラウザのメモリが不足し、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時間以上実行する必要があるため、この問題のために使用できなくなりました。私は解決策を切望しています。