Я знаю, что нелегко правильно управлять памятью внутри приложения с большим количеством элементов пользовательского интерфейса и полностью на основе Ajax (в моем приложении страницы никогда не перезагружаются). Но я хотел бы понять следующее поведение:
У меня есть корневой элемент, к которому одновременно должен быть присоединен один дочерний элемент (он рассматривается как корневой элемент, являющийся контейнером приложения, а дочерние элементы - отдельными страницами).
Всякий раз, когда я переключаюсь между дочерним содержимым, я удаляю предыдущее содержимое с помощью jQuery.remove (), но вижу, что содержимое фактически отделено от DOM, но остается в памяти.
- корень и два дочерних содержимого (child1 и child2)
- с child1 Я переключаю на child2, прося, чтобы мой менеджер приложений удалил child1 перед присоединением child2
- child2 присоединяется (я вижу это), но я все еще могу использовать элементы child1 из кода, который управляет child1
код child1 (который содержит ссылки на DOM child1):
function testaccess(){
load_and_remove(child2);
var child1DOM = get_this_dom();
}
child1DOM все еще там, и я могу манипулировать им, как если бы он все еще был подключен к DOM.
Хорошо, я полагаю, что jQuery.remove () и GC не смогут освободить память, пока у меня не будет кода, который получит к нему доступ, но даже если я не вызову get_this_dom (), даже после выхода из testaccess ( ), Я вижу, что память FF не уменьшается ...
Интересно, как заставить GC освободить всю память, когда я выхожу из child1.