अलग किए गए डोम तत्व
डिटैच्ड DOM एलिमेंट वे एलिमेंट हैं जिन्हें DOM से हटा दिया गया है लेकिन जावास्क्रिप्ट के कारण उनकी मेमोरी अभी भी बरकरार है। इसका मतलब यह है कि जब तक तत्व के पास कहीं भी किसी चर या वस्तु का संदर्भ होता है, तब तक वह DOM से नष्ट होने के बाद भी कचरा एकत्र नहीं करता है।
DOM एक डबल-लिंक्ड ट्री की तरह है जिसका अर्थ है कि ट्री में एक नोड का संदर्भ पूरे ट्री को कचरा संग्रहण से रोक देगा।
आइए जावास्क्रिप्ट में एक डोम तत्व बनाने का एक उदाहरण लें। तत्व बनाने के बाद इसे नष्ट कर दें लेकिन इसे धारण करने वाले चर को हटाना भूल जाएं। यह परिदृश्य एक अलग DOM की ओर ले जाता है जिसका न केवल विशेष DOM तत्व बल्कि पूरे पेड़ के लिए भी संदर्भ होता है।
उदाहरण
निम्नलिखित उदाहरण में, DOM से हटाए जाने के बाद भी, 'someText' का वैश्विक 'मान' ऑब्जेक्ट में अभी भी एक संदर्भ होगा। यही कारण है कि इसे कचरा संग्रहकर्ता से समाप्त नहीं किया जा सकता है और स्मृति का उपभोग करना जारी रखता है। इससे स्मृति रिसाव होता है।
<html> <body> <script> var example = document.createElement("p"); example.id = "someText"; document.body.appendChild(example); var value = { text: document.getElementById('someText') }; function createFun() { value.text.innerHTML = "Javascript is not Java"; } createFun(); function deleteFun() { document.body.removeChild(document.getElementById('someText')); } deleteFun(); </script> </body> </html>
मेमोरी लीक से बचना
स्मृति रिसाव से बचने के लिए, सबसे अच्छा अभ्यास श्रोता के अंदर var उदाहरण डालना है, जो इसे स्थानीय चर बनाता है। जब var उदाहरण हटा दिया जाता है तो ऑब्जेक्ट के लिए पथ कटऑफ हो जाएगा, जिससे कचरा संग्रहकर्ता स्मृति को मुक्त कर सकेगा।