Tôi thấy rằng việc sử dụng AngularFireAuthModule
từ '@angular/fire/auth';
gây ra rò rỉ bộ nhớ đã làm sập trình duyệt sau 20 giờ.
Phiên bản:
Tôi sử dụng phiên bản mới nhất được cập nhật hôm nay bằng cách sử dụng ncu -u cho tất cả các gói.
Lửa góc: "@angular/fire": "^5.2.3",
Phiên bản hỏa lực : "firebase": "^7.5.0"
,
Cách sinh sản:
Tôi đã tạo mã có thể tái tạo tối thiểu trên trình soạn thảo StackBliztz
Dưới đây là liên kết để kiểm tra lỗi trực tiếp Kiểm tra StackBlizt
Triệu chứng:
Bạn có thể tự kiểm tra xem mã không làm gì cả. Nó chỉ in thế giới xin chào. Tuy nhiên, bộ nhớ JavaScript được sử dụng bởi Ứng dụng Angular tăng thêm 11 kb / s (Trình quản lý tác vụ Chrome CRTL + ESC). Sau 10 giờ để trình duyệt mở, bộ nhớ được sử dụng đạt xấp xỉ 800 mb (dung lượng bộ nhớ khoảng hai lần 1.6 Gb !)
Hậu quả là trình duyệt hết bộ nhớ và tab chrome gặp sự cố.
Sau khi điều tra thêm bằng cách sử dụng cấu hình bộ nhớ của chrome trong tab hiệu suất, tôi nhận thấy rõ rằng số lượng người nghe tăng 2 mỗi giây và do đó, heap JS tăng theo.
Mã gây rò rỉ bộ nhớ:
Tôi thấy rằng việc sử dụng AngularFireAuthModule
mô-đun gây ra rò rỉ bộ nhớ cho dù nó được đưa vào trong một hàm component
tạo hoặc trong một 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){
}
}
Câu hỏi :
Nó có thể là một lỗi trong quá trình triển khai FirebaseAuth và tôi đã mở một vấn đề Github, nhưng tôi đang tìm cách giải quyết cho vấn đề này. Tôi đang tuyệt vọng cho một giải pháp. Tôi không bận tâm ngay cả khi các phiên trên các tab không được đồng bộ hóa. Tôi không cần tính năng đó. Tôi đọc ở đâu đó
nếu bạn không yêu cầu chức năng này, các nỗ lực mô đun hóa Firebase V6 sẽ cho phép bạn chuyển sang localStorage có các sự kiện lưu trữ để phát hiện các thay đổi của các tab chéo và có thể sẽ cung cấp cho bạn khả năng xác định giao diện lưu trữ của riêng bạn.
Nếu đó là giải pháp duy nhất, làm thế nào để thực hiện điều đó?
Tôi chỉ cần bất kỳ giải pháp nào ngăn chặn sự gia tăng người nghe không cần thiết này vì nó làm chậm máy tính và làm hỏng ứng dụng của tôi. Ứng dụng của tôi cần chạy hơn 20 giờ để không sử dụng được do vấn đề này. Tôi đang tuyệt vọng cho một giải pháp.