Утечка памяти
Подскажите кто-нибудь из опытных.
У меня есть дерево меню, которое содержит одинарные узлы и список узлов, каждый узел имеет ссылку на родительский узёл. Вопрос произойдёт ли утечка памяти если я буду удалять узел, который содержит список узлов? Посмотрите на метод remove(), правильно ли я удаляю узлы? function Button(name) { this.id = -1; this.parent = null; this.name = name; this.html = "<div>Кнопка</div>"; } Button.prototype = { setId: function(id) { this.id = id; }, setParent: function(parent) { this.parent = parent; }, remove: function() { this.parent = null; this.html = ""; } } function List() { this.id = 0; this.children = {}; } List.prototype = { parent: null, setParent: function(parent) { this.parent = parent; }, add: function(child) { this.children[this.id++] = child; child.setParent(this); }, remove: function(id) { if (id in this.children) { var node = this.children[id]; if (node.children) { for (var k in node.children) { node.remove(k); } delete this.children[id]; node.parent = null; node = null; } else { node.remove(); delete this.children[id]; node = null; } } } } var root = new List(); var menu = new List(); var submenu = new List(); submenu.add(new Button("Подпункт 1")); submenu.add(new Button("Подпункт 2")); submenu.add(new Button("Подпункт 3")); menu.add(new Button("Кнопка 1")); menu.add(submenu); root.add(menu); console.log(menu.children); //menu.remove(1); //console.log(menu.children); |
Если я буду систематически удалять элементы на которых висели слушатели (evenListener) то когда течка станет заметной?
Сколько тыщ надо удалить чтобы явно протекло? Да, проблемка мелкая, решать не хочется. События вешаются на элемент в содержании, а удаляется - контейнер. Искать там эти долбаные ссылки или индексировать их нах - про течку кто знает? |
Когда пользовал jQuery 1.3 она текла. Не удаляла обработчики перед удалением элемента. Меню из 10-15 пунктов за 12-20 часов вешала браузер. Меню рендарилось кажые 15 секунд. То есть каждые 15 секунд в памяти появлялось 10-15 новых обработчиков.
Все это работало с серверным java фреймворком richfaces который генерил js код, так что исправить это было трудно :cray: |
Часовой пояс GMT +3, время: 04:01. |