मैं डीओएम तत्वों के साथ गतिशील रूप से परिवर्तनीय डेटा को प्रदर्शित करने की कोशिश कर रहा हूं (उन्हें जोड़/हटा रहा हूं)। मुझे लगभग सभी ब्राउज़रों का एक बहुत ही अजीब व्यवहार पता चला: मैंने एक डोम तत्व हटा दिए जाने के बाद और फिर एक नया जोड़ा, ब्राउज़र हटाए गए डीओएम आइटम द्वारा ली गई मेमोरी को मुक्त नहीं कर रहा है। मेरा मतलब समझने के लिए नीचे दिया गया कोड देखें। इस पृष्ठ को चलाने के बाद यह 150 एमबी मेमोरी तक चरण-दर-चरण खाएगा। क्या कोई मुझे इस अजीब व्यवहार की व्याख्या कर सकता है? या शायद मैं कुछ गलत कर रहा हूँ?चक्रीय जोड़ना/डीओएम नोड्स को हटाने से जावास्क्रिप्ट में मेमोरी लीक हो जाती है?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<script type="text/javascript">
function redrawThings() {
// Removing all the children from the container
var cont = document.getElementById("container");
while (cont.childNodes.length >= 1) {
cont.removeChild(cont.firstChild);
}
// adding 1000 new children to the container
for (var i = 0; i < 1000; i++) {
var newDiv = document.createElement('div');
newDiv.innerHTML = "Preved medved " + i;
cont.appendChild(newDiv);
}
}
</script>
<style type="text/css">
#container {
border: 1px solid blue;
}
</style>
</head>
<body onload='setInterval("redrawThings()", 200);'>
<div id="container"> </div>
</body>
</html>
बस एक तरफ ध्यान दें: ['setInterval'] (https://developer.mozilla.org/en/DOM/window.setInterval) पर पैरामीटर के रूप में स्ट्रिंग का उपयोग न करें:" इस वाक्यविन्यास का उपयोग करने की अनुशंसा नहीं की जाती है [eval()] (https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval#Don%27t_use_eval%21) का उपयोग करने के समान कारणों के लिए " –
नोट मार्सेल के लिए धन्यवाद! मुझे सिंटैक्स नहीं पता था। –