Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.11.2014, 18:58
Интересующийся
Отправить личное сообщение для javacrypt Посмотреть профиль Найти все сообщения от javacrypt
 
Регистрация: 10.11.2014
Сообщений: 12

Утечка памяти
Подскажите кто-нибудь из опытных.
У меня есть дерево меню, которое содержит одинарные узлы и список узлов, каждый узел имеет ссылку на родительский узёл. Вопрос произойдёт ли утечка памяти если я буду удалять узел, который содержит список узлов? Посмотрите на метод 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);

Последний раз редактировалось javacrypt, 10.11.2014 в 19:01.
Ответить с цитированием
  #2 (permalink)  
Старый 11.11.2014, 16:14
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Если я буду систематически удалять элементы на которых висели слушатели (evenListener) то когда течка станет заметной?

Сколько тыщ надо удалить чтобы явно протекло?

Да, проблемка мелкая, решать не хочется. События вешаются на элемент в содержании, а удаляется - контейнер. Искать там эти долбаные ссылки или индексировать их нах - про течку кто знает?
Ответить с цитированием
  #3 (permalink)  
Старый 11.11.2014, 16:25
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Когда пользовал jQuery 1.3 она текла. Не удаляла обработчики перед удалением элемента. Меню из 10-15 пунктов за 12-20 часов вешала браузер. Меню рендарилось кажые 15 секунд. То есть каждые 15 секунд в памяти появлялось 10-15 новых обработчиков.

Все это работало с серверным java фреймворком richfaces который генерил js код, так что исправить это было трудно
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Утечка памяти в плагине для jQuery. TheWanderer jQuery 0 20.11.2013 16:22
Утечка памяти и борьба новым способом) KupueIIIKo Элементы интерфейса 6 03.08.2012 11:55
утечка памяти и window.open Vovan222 Events/DOM/Window 2 27.12.2010 19:19
утечка памяти при создании DOM MadLord Общие вопросы Javascript 2 16.08.2010 12:01
Как происходит утечка памяти в даном случае? Yazla Общие вопросы Javascript 2 09.11.2009 13:02