Узлы DOM не очищаются после удаления () - утечка памяти? - PullRequest
0 голосов
/ 16 апреля 2020

Мы заметили огромное количество узлов DOM и увеличение памяти в нашем приложении Angular, и в наших усилиях по его отладке мы сократили все . В итоге мы получили следующий чистый код html и javascript, который демонстрирует проблему.

Пожалуйста, следуйте следующему простому фрагменту кода.

<!DOCTYPE HTML>
<html>
    <head>
    </head><body></body></html>

Загрузить это сниппет на Chrome и откройте монитор производительности Chrome, щелкните значок «Сбор мусора» и увидите счетчик узлов DOM. Это должно быть 6.

Давайте просто добавим <input> следующим образом:

<!DOCTYPE HTML>
<html>
    <head>
    </head><body><input></body></html>

Перезагрузите фрагмент на новой вкладке и сосчитайте узлы DOM, должно быть 9.

Затем запустите это в консоли, чтобы удалить <input>

document.getElementsByTagName('input')[0].remove()

Количество должно быть 6, как и ожидалось.

Наконец, перезагрузите обрезанный на Снова новая вкладка. Убедитесь, что узлы DOM показывают 9, а затем введите текст в поле <input>. Вы заметите, что узлы DOM увеличиваются на единицу, достигая 10, это введенный #text, который добавляется в дерево DOM. Пока все хорошо.

Теперь давайте удалим <input>, как и раньше, с:

document.getElementsByTagName('input')[0].remove()

Посмотрите на DOM-узлы, они по-прежнему равны 10, как будто ничего не было удалено.

Есть мысли?

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