Я виявив, що використання AngularFireAuthModule
від " '@angular/fire/auth';
спричиняє витік пам'яті", який вибиває браузер через 20 годин.
Версія:
Я використовую останню оновлену сьогодні версію, використовуючи ncu -u для всіх пакетів.
Кутовий вогонь: "@angular/fire": "^5.2.3",
Firebase версія: "firebase": "^7.5.0"
,
Як відтворити:
Я зробив мінімальний відтворюваний код у редакторі StackBliztz
Ось посилання для тестування помилки безпосередньо на тесті StackBlizt
Симптом:
Ви можете переконатися, що код нічого не робить. Він просто друкує привіт світ. Однак пам'ять JavaScript, яка використовується програмою Angular, збільшується на 11 кбіт / с (Chrome Task Manager CRTL + ESC). Через 10 годин залишаючи браузер відкритим, використовувана пам'ять досягає приблизно 800 мб (слід пам’яті приблизно вдвічі більше 1,6 Гбіт !)
Як результат, у веб-переглядача не вистачає пам'яті, а вкладка хрому виходить з ладу.
Після подальшого дослідження за допомогою профілювання хромування пам'яті на вкладці продуктивності я чітко помітив, що кількість слухачів збільшується на 2 щосекунди, і відповідно купі JS збільшується відповідно.
Код, що спричиняє витік пам'яті:
Я виявив, що використання AngularFireAuthModule
модуля спричиняє витік пам'яті, вводиться він у component
конструктор чи в a 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 годин, тому він зараз непридатний через цю проблему. Я відчайдушно шукаю рішення.