Neopitniy, планирую написать парсер для множества однотипных XML. Изучил возможные решения в сети и понял, что проще всего разбирать XML будет самому по следующему способу: 1. Создаем элемент через createElement() 2. Записываем в него наш XML-документ 3. А далее банально используем querySelector
Однако в процессе работы, будет создаваться много-много переменных, которые после парсинга останутся какое-то время висеть в памяти, засоряя ее и отъедая оперативку. Конечно, хром обычно автоматически чистит такой мусор, но иногда он может просто не успевать все вычищать и мусор будет копится быстрее, чем происходит чистка, у меня уже бывало такое в многопотчных парсерах: когда браузер начинает отъедать более 2 Гб оперативки он обычно крошится, чего мне хотелось бы избегать, а значит надо чистить переменные после использования самому.
WapSter, сборщик может не успевать чистить, плавали, знаем. Если я буду делать сотни и тысячи асинхронных аякс запросов, а потом ответ на лету парсить, то утечки памяти будут с гарантией, лучше уж самому ручками освобождать память после каждой операции парсинга, чем понадеяться на сборщик.
Neopitniy, как правильнее будет, записать null или записать undefined? Если я сделаю переменную после использования undefined она действительно будет пустой или по прежнему будет отъедать памяти, но уже со значением undefined? Мои вопросы могут показаться тупыми, но как раньше не доводилось интересоваться такими нюансами)
2CHEVSKII, ну допустим. Однако вопрос есть, должен быть и ответ. Так как правильно, с точки зрения экономии памяти, освободить переменную после использования?
Надим Закиров, переменную освободить нельзя, она не является ресурсом, это всего лишь указатель на ресурс. Ресурс будет освобожден, когда на него не останется активных указателей - локальные переменные пропадут из области видимости, а глобальные - будут переназначены. Лучший подход - не собирать в глобальных переменных кучу ненужных данных, тогда не надо будет ничего освобождать.
Надим Закиров, в дополнение к ответу предыдущему. Важно понимать, что все переменные примитивных типов, как undefined, null, NaN, Infinity - это единственные переменные указывающие на свои единственные значения, которые указывают на одну область памяти, поэтому присваивая переменной эти значения вы автоматически удаляете ссылки на другое значение 'до' этой переменной и тем самым даёте сборщику право освободить память при следующем обходе сборщика мусора. Но не раньше. Значение в памяти будут сохранены, даже когда ссылок на них уже нет, удаление их - задача сборщика и тут ничего не поделаешь, нужно ждать его очереди.