Является ли это решение правильным или нет для устранения утечки памяти DOM - PullRequest
0 голосов
/ 26 апреля 2018

Все:

Когда я пытаюсь следовать руководству по утечке памяти в JS DOM, есть один пример утечки памяти о СТАРЫЙ IE (7, 8):

<div id="myDiv">
    <button id="myBtn">Click Me</button>
</div>

<script type="text/javascript">
    var btn = document.getElementById("myBtn");
    btn.onclick = function(){
        document.getElementById("myDiv").innerHTML = "Processing...";
    }
</script>

И решение, которое оно дает:

<div id="myDiv">
    <button id="myBtn">Click Me</button>
</div>

<script type="text/javascript">
    var btn = document.getElementById("myBtn");
    btn.onclick = function(){




        btn.onclick = null;





        document.getElementById("myDiv").innerHTML = "Processing...";
    }
</script>

Мое смущение здесь:

  1. В чем утечка: объект myBtn DOM или функция onclick? (Насколько я понимаю: он пытается сказать DOM, потому что этот innerHTML пытается заменить весь узел кнопки текстовым узлом)
  2. Если DOM является утечкой, то эта переменная btn по-прежнему ссылается на DOM, что приводит к невозможности ее GCed, почему это может быть решением?

Спасибо

1 Ответ

0 голосов
/ 26 апреля 2018

Утечка есть в обоих случаях. Вы должны освободить переменную btn, указывающую на объект DOM, и событие onclick, чтобы прекратить прослушивание этого события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...