Утечка памяти
Вопросы:
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, время: 03:43. |