Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.06.2014, 08:26
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Удаление таких слушателей событий (на примере easeljs)
Вопрос связан с потерями памяти в js

На примере библиотеки easeljs.

Нужно ли удалять слушателя события, перед удалением экземпляра класса Shape?

Пример 1:

var stage = new createjs.Stage(canvas);
var shape = new createjs.Shape();
shape.graphics.beginFill("#333").drawCircle(0,0,5);

// подписывается на тик
shape.addEventListener("tick", function (event) {
    console.log(this);
}.bind(this));

stage.addChild(shape);

// ...

stage.removeChild(shape);



Пример 2:

var counter = 0;
var stage = new createjs.Stage(canvas);
var shape = new createjs.Shape();
shape.graphics.beginFill("#333").drawCircle(0,0,5);

// подписывается на тик
shape.addEventListener("tick", function (event) {
    counter ++;
    console.log(counter);
});

stage.addChild(shape);

// ...

stage.removeChild(shape);




Нужно ли удалять слушателя перед удалением экземпляра?

// удаление слушателя
shape.removeEventListener('tick');


?

Последний раз редактировалось dmitry111, 18.06.2014 в 10:11.
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2014, 14:05
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

проверь в исходниках, заботится ли об этом stage.removeChild
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2014, 15:55
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от melky
проверь в исходниках, заботится ли об этом stage.removeChild


насколько я понял, нет!
но, может об этом заботится браузер?

Ведь по логике получается, что я удаляю основу, так зачем хранить лишнюю информацию для того, чего нет? ))
Ответить с цитированием
  #4 (permalink)  
Старый 18.06.2014, 21:32
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

dmitry111, по идее - если на объект нет ни одной ссылки - он собирается GC.
Соответственно надо смотреть - не остаётся ли где-то внутри ссылок.
Ну и для надёжности можно в цикле создать-удалить пару-другую миллиончиков и посмотреть на потребление памяти.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 19.06.2014, 09:59
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от Aetae
dmitry111, по идее - если на объект нет ни одной ссылки - он собирается GC.

вот и я так думаю!

Сообщение от Aetae
Ну и для надёжности можно в цикле создать-удалить пару-другую миллиончиков и посмотреть на потребление памяти.

Только вот где посмотреть?
Думаю, что в консоли хрома (вкаладка Profiles) возможно это как-то отследить. Только там куча всяких объектов и где должен быть прирост непонятно. Вроде в Event, но он не растет, хотя память постепенно увеличивается! ))
Ответить с цитированием
  #6 (permalink)  
Старый 19.06.2014, 15:53
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

dmitry111, в диспетчере процессов же) Главное объектов побольше насоздавать.)
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 19.06.2014, 17:54
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от Aetae
dmitry111, в диспетчере процессов же) Главное объектов побольше насоздавать.)

там все ок, даже если есть связи с внешними данными. Тестил в хроме
Ответить с цитированием
  #8 (permalink)  
Старый 19.06.2014, 20:29
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от dmitry111
Думаю, что в консоли хрома (вкаладка Profiles) возможно это как-то отследить. Только там куча всяких объектов и где должен быть прирост непонятно. Вроде в Event, но он не растет, хотя память постепенно увеличивается! ))
смотри в доминаторах и корнях. там это есть
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элементов и обработчики событий xmlns jQuery 1 18.06.2014 09:40
Центрирование Div-а ч2 alex2012 jQuery 0 15.11.2012 19:01
Удаление обработчика событий! Даниэль Ноубл Общие вопросы Javascript 1 23.04.2010 17:12