Циклическое добавление / удаление узлов DOM вызывает утечку памяти в JavaScript?

Я пытаюсь отобразить динамически изменяемые данные, манипулируя элементами DOM (добавляя / удаляя их). Я обнаружил очень странное поведение почти всех браузеров: после того, как я удалил элемент DOM, а затем добавил новый, браузер не освобождает память, занятую удаленным элементом DOM. См. Код ниже, чтобы понять, что я имею в виду. После того, как мы запустим эту страницу, она постепенно съест до 150 МБ памяти. Кто-нибудь может объяснить мне это странное поведение? Или, может быть, я m что-то не так?

<!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>
6
задан Marcel Korpel 20 September 2010 в 11:19
поделиться