मुझे पता है कि इस सवाल से पहले पूछा गया है, लेकिन कोई भी जवाब इस मुद्दे को हल करने के लिए प्रतीत नहीं होता है। मैं एक AJAX वेबपृष्ठ का परीक्षण कर रहा हूं जो जावास्क्रिप्ट के माध्यम से DOM में तत्वों को अद्यतन करता है।जावास्क्रिप्ट के माध्यम से डोम को अपडेट करना जिससे स्मृति लीक (केवल फ़ायरफ़ॉक्स में)
हर मिनट, सर्वर को नए डेटा के लिए पूछताछ की जाती है और डीओएम तदनुसार अपडेट किया जाता है। जो मैं बता सकता हूं, क्रोम में इस पृष्ठ के लिए स्मृति उपयोग बढ़ता है, लेकिन बहुत अधिक नहीं (यह लगभग 40 एमबी शुरू होता है और अधिकतम 80 एमबी तक पहुंचता है)। फ़ायरफ़ॉक्स में, हालांकि, स्मृति उपयोग लगभग 120 एमबी शुरू होता है और 400 एमबी से अधिक तक फैल सकता है। मैंने फ़ायरबग के साथ जावास्क्रिप्ट के माध्यम से कदम रखा है और ऐसा लगता है कि जब मेरी Davascript विधियों के माध्यम से डोम अपडेट किया जाता है तो स्मृति सबसे अधिक फैलता है।
var myTable = document.createElement("table");
var thead = document.createElement("thead");
var tr = document.createElement("tr");
var th = document.createElement("th");
th.appendChild(document.createTextNode("column1"));
tr.appendChild(th);
for(var test in obj.testObjs){
th = document.createElement("th");
th.appendChild(document.createTextNode(obj.testObjs[test].myVar));
tr.appendChild(th);
}
डोम में नोड्स के लिए नए डेटा जोड़कर से पहले, मैं पहले मौजूदा डेटा साफ़:
डोम हेरफेर, जैसे सरल है। मैं सहित कई तरीकों से, की कोशिश की है कि यहाँ क्या वर्णित है: How to remove DOM elements without memory leaks?
साथ ही इस तरह के रूप में एक आसान तरीका:
function clearChildren(node){
if(node != null){
while (node.hasChildNodes()) node.removeChild(node.firstChild);
}
}
मैं भी पढ़ा है (Cyclic adding/removing of DOM nodes causes memory leaks in JavaScript?) ब्राउज़रों कि केवल कचरा संग्रहण प्रारंभ जब यह एक निश्चित स्तर तक पहुंचता है? क्या इसकी पुष्टि हो सकती है? मुझे लगता है कि बढ़ती हुई स्मृति के कारण मेरा पीसी थोड़ी देर बाद सुस्त चल रहा है।
मुझे लगता है कि इसका समाधान होना चाहिए, क्योंकि वाणिज्यिक साइट्स जो मैंने परीक्षण की है, वही कार्यात्मक कदम करने से स्मृति उपयोग बढ़ने का कारण नहीं बनता है।
किसी भी मदद की सराहना की जाएगी।
धन्यवाद।
प्रतिक्रिया के लिए धन्यवाद - क्या Mootools JQuery के साथ हस्तक्षेप करता है? मैं अपनी साइट पर JQuery का उपयोग कर रहा हूं, और जब Mootools() फ़ंक्शन को नष्ट करने का प्रयास कर रहा हूं, तो मुझे एक जेएस त्रुटि मिलती है कि "नष्ट करें() एक फ़ंक्शन नहीं है" – user172092
आपको इसे एक साथ खेलने के लिए सही तरीके से सेट करने की आवश्यकता है (इन मेरी साइट वे अच्छी तरह से करते हैं)। जैसे, Mootools निर्भर कोड में '$' का उपयोग करने के बजाय, आपको 'document.id ('चयनकर्ताओं ...') ' –
धन्यवाद - ऐसा लगता है जैसे स्मृति उपयोग लगातार बढ़ रहा है, और मुझे कभी-कभी यह कम हो रहा है। तुम्हारी सहायता सराहनीय है। – user172092