Создание элементов, забивает ли память браузеру

for (let key in obj)
   document.createElement(Type)

Предположим, цикл выполняется бесконечно. Создает элементы, забивается ли память у пользователя?

То есть, ресурсы браузера к примеру? Когда создается один и тоже элемент...

let tt;
for (let key in obj)
   tt = document.createElement(Type)

Так, допустим каждый раз перезаписываем переменную. При этом тоже создаем один и тот же элемент...


Ответы (1 шт):

Автор решения: Daniil Loban

Если коротко — да, но обратите внимание если на объект не остается ссылок (Вы его перезаписываете) он будет уничтожен — память освободится через какое-то время сборщиком мусора. Так как новый объект создается не в том же участке памяти, он не сможет переиспользовать старую память пока она не освободится. Поэтому лучше не делать бесконечные циклы с таким кодом, тем более что используя createElement выделение памяти происходит скрыто (в отличие от new где Вы точно знаете под что выделяется память)

Как правило, если Вы нуждаетесь в таких решениях, значит конечный алгоритм плохо продуман, попробуйте другой подход.

Dev-tools позволяют программисту контролировать много различных аспектов, в том числе и определять утечки памяти, когда вкладка с каждым новым действием или сама по себе начинает расходовать все больше и больше памяти.

Для того чтобы проверить расход памяти воспользуйтесь следующими шагами:

  • Открываете страницу вашего вебприложения
  • Нажимаете F12 для вызова dev-tools
  • Переходите на вкладку Память или Memory

Так как подсчет статистики расхода памяти трудоемкий процесс для браузера мы используем снимки или snapshots в которых отображается вся статистика на конкретный момент времени, сделав несколько снимков (кнопка фотопарат в Firefox) через разный период времени Вы потом имеете возможность сравнивать их с помощью кнопки Compare snapshots (пересекающиеся круги в Firefox) если используете Firefox.

Memory Firefox

В Chromium картинка будет следующей:

Memory Chromium

→ Ссылка