Утечка памяти
Вопросы:
1) Если мы удаляем элемент без jQuery, на котором был обработчик jQuery, то обработчик остается в памяти? 2) Удаляется ли обработчик если мы удаляем элемент с помощью jQuery? 3) Если обработчик записан в html в атрибуте, например, onclick надо ли мне как либо удалять обработчик, или при удалении элемента? |
1) да
2) да 3) сборщик мусора сожрёт |
Спасибо!
А если элемент уже удален, и обработчик остался, его можно как-то удалить (касательно вопроса 1)? И если кто работал с апи опенлейрс, надо ли снимать обработчики при рендоре фич (создаю и удаляю с помощью апи)? (например у нас слой с 1000 объектов каждые 3 секунды 100 или 200 из них рендорятся. На всех есть события клика и наведения, надо ли их снимать перед удалением?) И касательно второго вопроса: Если мы удаляем не напрямую элемент с обработчиком, а контейнер с кучей элементов в которых разные обработчики (с помощью jQuery), то он сначала снимет все обработчики у себя и у своих детей, или только у себя? Если обработчик внутри большого объекта, то в памяти весь объект из-за замыкания? |
Цитата:
только для начала надо найти именно ЭТОТ обработчик среди кучи других. Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Как я назначаю события на клик:
var Handlers = {
/**
* Объект, ключи в котором - названия классов, в которых необходимо запускать события,
* а значение - функция, которую надо выполнить
*/
handlersData: {
showModalWindow: showBlock,
addServerTsoo: editServerTsooAdd,
slideFadeGo: SlideFadeInit,
eventFormyliarToggleTextSlide: eventFormyliarToggleTextSlide,
turn: turnClick
},
/**
* Вешаем общее событие на document
*/
setHandlers: function () {
var $ = $j;
var that = this;
$(document).on({
'click': function (e) {
var _class = event.target.className;
if (_class != undefined) {
if (typeof _class == "string") {
var classArray = _class.split(' ');
for (var i in classArray) {
if (that.handlersData[classArray[i]] != undefined)
(that.handlersData[classArray[i]])();
}
}
}
}
});
}
}
|
tsigel, делегирование событий уже встроено в jQuery. Смотри документацию (api.jquery.com)
|
danik.js,
Спасибо |
Но если использовать вариант
.on(events, [selector], [data], handler)то получается 5 обработчиков вместо одного. Чем это лучше? У них же есть events-map, чтобы вешать на разные события разные обработчики, но нет selector-map, чтобы назначить выполнение разных функций в одном событии. |
Цитата:
|
| Часовой пояс GMT +3, время: 11:15. |