Удаление таких слушателей событий (на примере 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, время: 01:32. |