Удаление таких слушателей событий (на примере 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');
? |
проверь в исходниках, заботится ли об этом stage.removeChild
|
Цитата:
насколько я понял, нет! но, может об этом заботится браузер? Ведь по логике получается, что я удаляю основу, так зачем хранить лишнюю информацию для того, чего нет? )) |
dmitry111, по идее - если на объект нет ни одной ссылки - он собирается GC.
Соответственно надо смотреть - не остаётся ли где-то внутри ссылок. Ну и для надёжности можно в цикле создать-удалить пару-другую миллиончиков и посмотреть на потребление памяти. |
Цитата:
вот и я так думаю! Цитата:
Только вот где посмотреть? Думаю, что в консоли хрома (вкаладка Profiles) возможно это как-то отследить. Только там куча всяких объектов и где должен быть прирост непонятно. Вроде в Event, но он не растет, хотя память постепенно увеличивается! )) |
dmitry111, в диспетчере процессов же) Главное объектов побольше насоздавать.)
|
Цитата:
там все ок, даже если есть связи с внешними данными. Тестил в хроме |
Цитата:
|
| Часовой пояс GMT +3, время: 16:09. |