Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Удаление таких слушателей событий (на примере easeljs) (https://javascript.ru/forum/offtopic/48056-udalenie-takikh-slushatelejj-sobytijj-na-primere-easeljs.html)

dmitry111 18.06.2014 08:26

Удаление таких слушателей событий (на примере 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');


?

melky 18.06.2014 14:05

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

dmitry111 18.06.2014 15:55

Цитата:

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



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

Ведь по логике получается, что я удаляю основу, так зачем хранить лишнюю информацию для того, чего нет? ))

Aetae 18.06.2014 21:32

dmitry111, по идее - если на объект нет ни одной ссылки - он собирается GC.
Соответственно надо смотреть - не остаётся ли где-то внутри ссылок.
Ну и для надёжности можно в цикле создать-удалить пару-другую миллиончиков и посмотреть на потребление памяти.

dmitry111 19.06.2014 09:59

Цитата:

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


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

Цитата:

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


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

Aetae 19.06.2014 15:53

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

dmitry111 19.06.2014 17:54

Цитата:

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


там все ок, даже если есть связи с внешними данными. Тестил в хроме

melky 19.06.2014 20:29

Цитата:

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

смотри в доминаторах и корнях. там это есть


Часовой пояс GMT +3, время: 01:32.