मैंने पाया है कि का उपयोग कर AngularFireAuthModule
से '@angular/fire/auth';
एक स्मृति रिसाव है कि 20 घंटे के बाद ब्राउज़र दुर्घटनाओं का कारण बनता है।
संस्करण:
मैं सभी संकुल के लिए ncu -u का उपयोग करके आज अद्यतन किए गए नवीनतम संस्करण का उपयोग करता हूं।
कोणीय अग्नि: "@angular/fire": "^5.2.3",
फायरबेस संस्करण: "firebase": "^7.5.0"
,
कैसे पुन: पेश करें:
मैंने एक न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य कोड बनाया StackBliztz संपादक
यहाँ सीधे StackBlizt परीक्षण बग का परीक्षण करने के लिए लिंक है
लक्षण:
आप खुद देख सकते हैं कि कोड कुछ नहीं करता है। यह सिर्फ हैलो वर्ल्ड को प्रिंट करता है। हालाँकि, Angular App द्वारा उपयोग की जाने वाली JavaScript मेमोरी 11 kb / s (क्रोम टास्क मैनेजर CRTL + ESC) से बढ़ती है। ब्राउज़र को खुला छोड़ने के 10 घंटे बाद, उपयोग की गई मेमोरी लगभग 800 mb तक पहुँच जाती है (मेमोरी फ़ुटप्रिंट लगभग 1.6 Gb है !)
नतीजतन, ब्राउज़र मेमोरी से बाहर चला जाता है और क्रोम टैब क्रैश हो जाता है।
प्रदर्शन टैब के तहत क्रोम की मेमोरी प्रोफाइलिंग का उपयोग करके आगे की जांच के बाद, मैंने स्पष्ट रूप से देखा कि श्रोताओं की संख्या में हर सेकंड 2 की वृद्धि होती है और इसलिए जेएस हीप तदनुसार बढ़ता है।
स्मृति रिसाव का कारण बनने वाला कोड:
मैंने पाया कि 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 modularization प्रयास आपको लोकलस्टोरेज पर स्विच करने की अनुमति देगा जिसमें परिवर्तन क्रॉस टैब्स का पता लगाने के लिए स्टोरेज इवेंट हैं, और संभवतः आपको अपने स्वयं के स्टोरेज इंटरफ़ेस को परिभाषित करने की क्षमता प्रदान करेगा।
यदि यह एकमात्र समाधान है, तो इसे कैसे लागू किया जाए?
मुझे बस किसी ऐसे समाधान की आवश्यकता है जो श्रोता की इस अनावश्यक वृद्धि को रोक दे क्योंकि यह कंप्यूटर को धीमा कर देता है और मेरे ऐप को क्रैश कर देता है। मेरे ऐप को 20 घंटे से अधिक समय तक चलने की आवश्यकता है, इसलिए इस मुद्दे के कारण अब यह अनुपयोगी है। मैं एक समाधान के लिए बेताब हूं।