Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Нужно ли удалять события в js? (https://javascript.ru/forum/offtopic/33507-nuzhno-li-udalyat-sobytiya-v-js.html)

dmitry111 26.11.2012 04:38

Нужно ли удалять события в js?
 
После того как событие выполнило свою работу и больше не нужно обязательно ли его удалять?

Вот есть кнопка, при клике возникает сообщение, предположим выводит "да" и "нет" - к ним привязано событие. Когда пользователь выберет вариант сообщение пропадет, но событие останется.

Нужно ли за этим следить?

ksa 26.11.2012 09:54

Цитата:

Сообщение от dmitry111
Нужно ли за этим следить?

Все зависит от алгоритма...
Если возможна повторная обработка - не трогать. Если нет - удалять или "прятать" сам источник возникновения события...

Gozar 26.11.2012 11:41

Цитата:

Сообщение от dmitry111
Нужно ли удалять события в js?

Не встречал, чтобы удаляли события. Это возможно?

Gozar 26.11.2012 12:00

Цитата:

Сообщение от iGodOfAllMaxmaxmaximus
removeEventListener, а вообще толсто и не смешно

Ты удалил обработчик а не событие. Вопрос задан иначе. Учимся правильно задавать вопросы. Всё таки ресурс не философский, а программистский.

Shaci 26.11.2012 12:08

Цитата:

Сообщение от Gozar (Сообщение 217882)
Ты удалил обработчик а не событие. Вопрос задан иначе. Учимся правильно задавать вопросы. Всё таки ресурс не философский, а программистский.

во-во, через ж.. вопросы задают(

melky 26.11.2012 13:08

Цитата:

Сообщение от dmitry111
Нужно ли за этим следить?

заместо тысячи обработчиков клика по кнопкам "да", "нет" лучше повесить один на родителя - window, например.

dmitry111 26.11.2012 13:31

Gozar, Shaci,

Обработчик это функция, которая реагирует на событие.
Удаляется событие на которое вешается обработчик (функция)


Цитата:

Сообщение от iGodOfAllMaxmaxmaximus
Ты сам решаешь нужно или нет. Пагубные последствия - миллибайты памяти. Если те похер - не следи, не похер - следи.

узнать бы что дороже: создавать/удалять событие при каждой необходимости или повесить один раз и держать его в памяти?
Ведь событий может быть очень много и если их не утилизировать то они так и будут занимать память, разве нет?

Gozar 26.11.2012 14:41

Цитата:

Сообщение от dmitry111
Удаляется событие на которое вешается обработчик (функция)

:blink: Код в студию.
Повесь пожалуйста на click или mousemove вот эту функцию:

function A() {
alert(10);
}


Цитата:

addEventListener() registers a single event listener on a single target. The event target may be a single element in a document, the document itself, a window, or an XMLHttpRequest.

Gozar 26.11.2012 15:09

В ниже следующем коде ты собираешься делать e = null?

var top = document.getElementById('maintable-first');

function handler(e) {
    alert(e.constructor); //[object MouseEvent]
    //e = null;
}

top.addEventListener('click', handler, false);

dmitry111 26.11.2012 15:41

Gozar,

e - это объект который возвращает браузер как реакцию на событие, разве нет?

Под событиями я понимаю click, mouseover, mousemove и прочие


да и метод removeEvent в перевода значит "удалить событие"


Я тоже сначала хотел назвать тему "удалить обработчик", но обработчик это функция, которая может быть использована не только с событием, зачем ее удалять?


Правильно тогда было бы сказать: удалить реакцию браузера на событие или как-то так))

Gozar 26.11.2012 17:11

dmitry111,
Не нужно трахать всем мозг. Ты создаешь ссылку на обработчик события.

Цитата:

Сообщение от dmitry111
метод removeEvent в перевода значит "удалить событие"

Такого метода нет. Есть - removeEventListener, что в переводе означает - удалить обработчик события.

Назвать тему нужно было: Нужно ли удалять ссылку на обработчик события, если он уже не нужен.

Ты плаваешь в понимании происходящего. Ищи темы про leak, если боишься обработчиков. Но в действительности ты ещё только на вершине айсберга. Замыкания могут "теоретически" сожрать память до падения браузера, на слабом компе. Особенно если ты будешь удалять ссылку на обработчик, а обработчик не умрет, а вот ссылку ты уже потеряешь на него.

Хочешь копнуть - создай окошко drug&drop с закрытием по крестику и чтобы его можно было таскать и чтобы окошек этих можно было создать одновременно 1000 и потести. Узнаешь много интересного.

dmitry111 26.11.2012 18:03

Gozar,

Цитата:

Сообщение от Gozar
Есть - removeEventListener, что в переводе означает - удалить обработчик события

Ну на самом деле "обработчик событий" в переводе значит "event handlers"

Цитата:

Сообщение от Gozar
Назвать тему нужно было: Нужно ли удалять ссылку на обработчик события, если он уже не нужен.

вот тут согласен, да! Ключевое слово "ссылка"

Формулировка вроде моей: "удалять событие"
или вроде вашей (и часто употребляемой кстати):
Цитата:

Сообщение от Gozar
Ты удалил обработчик а не событие.

не совсем корректны

Gozar 26.11.2012 18:48

Цитата:

Сообщение от dmitry111
Ну на самом деле "обработчик событий" в переводе значит "event handlers"

Ну на самом деле если ты китаец, в чём я уже нисколько не сомневаюсь, то все в порядке, а на русский язык принято переводить removeEventListener удалить обработчик события. А если ты такой умный, то ты должен бы это знать.

Это общепринятое понятие и если ты хочешь, чтобы тебя понимали другие люди, кроме твоего внутреннего ЭГО, то извольте выражаться на общепринятом языке.

Gozar 26.11.2012 18:55

зы: И да я вкурсе как переводиться listener.

Gozar 26.11.2012 18:59

И по теме. Удалять объект события не нужно, он удаляется сборщиком мусора, когда на него удалены все ссылки. В то время как обработчики события удалять нужно иначе память очищаться не будет и они будут болтаться в ней. Если на click это не критично, то на mousemove может стать очень критично.

dmitry111 26.11.2012 20:38

ок, да я и не спорю..
Удалять обработчик события, пусть будет так, раз все привыкли;

nerv_ 26.11.2012 20:49

dmitry111, ответ на вопрос.

Цитата:

Сообщение от Gozar
Не встречал, чтобы удаляли события. Это возможно?

да, если они пользовательские :)

Цитата:

Сообщение от melky
заместо тысячи обработчиков клика по кнопкам "да", "нет" лучше повесить один на родителя - window, например.

$( document ).on( 'click', 'простыня :)', function() {
});

все зависит от ситуации

Gozar 26.11.2012 21:08

Цитата:

Сообщение от nerv_
да, если они пользовательские

удали событие "увидел".

Gozar 26.11.2012 21:12

Приводите пожалуйста примеры кода, в подтверждение ваших слов. Моя твоя не понимай. Вернее моя, твоя понимай, но давайте с кода начинать, а не создавать дурацкие темы с догадайся сам, что я имею в виду.

Я уже когда-то имел удовольствие препираться по поводу вопроса "Сколько флешей может быть установлено на одной машине". Как оказалось вопрос получился с подковыркой. На самом деле плагинов отвечающих за интерпретацию кода может быть несколько(в линукс точно, в винде возможно только один), а вот хранилище флеша используется всегда одно.

nerv_ 26.11.2012 21:50

Цитата:

Сообщение от Gozar
Приводите пожалуйста примеры кода

как-то так. По материалам газеты "Комсомольская ПРАВДА" :)
<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script>
    var Gozar = $( {} );

    Gozar.on( 'say', function() {                   // создали свое событие и подписались на него
        alert( 'All monkeys are different.' );
    });

    Gozar.trigger( 'say' );                           // сгенерировали

    Gozar.off( 'say' );                                 // удалили обработчик
                                                            // теоретически, ничего не мешает удалить и самое событе
</script>

Цитата:

Сообщение от Gozar
удали событие "увидел".

не понял

Gozar 27.11.2012 00:30

Цитата:

Сообщение от nerv_
не понял

Забей. Это демагогия. Смысла развивать не имеет.

Хотя то, что ты называешь пользовательскими событиями на самом деле являются искусственными, а пользовательские таки click, mousemove и т.д.

nerv_ 27.11.2012 00:54

Цитата:

Сообщение от Gozar
Хотя то, что ты называешь пользовательскими событиями на самом деле являются искусственными, а пользовательские таки click, mousemove и т.д.

пожалуй, Вы правы, спасибо. Не стану объяснять, почему я применял такую терминологию, дабы больше никого не вводить в заблуждение.

Gozar is killer of errors :)

Atae 27.11.2012 02:33

Gozar, важно не слово, а его значение. Цель языка - коммуникация, обмен идеями и мыслями. Нужно же быть идиотом, не то что телепатом, чтобы не понять что под "событием" человек имеет ввиду обработчики событий. Так у меня вопрос, ты притворяешься идиотом который не понял и решил поумничать, поговорить очевидности или действительно идиот?

- ко ко ко, у слов есть общепринятые значения, если все будут говорить кто как вздумает тогда и понмиатьп ерестанут ко ко ко.

Дело в том что, как я уже выше сказал, цель языка - обмен идеями и мыслями, и если язык свою функцию выполняет, то значит он свою функцию выполняет, и дополнительные громоздкие уточнения ни к чему, тут же, язык выполнил свою функцию, и все НЕ ИДИОТЫ поняли о чем речь. Так же такая формулировка вопроса позволила отсеять идиотов от дискуссии(видимо не всех).


Ответь пожалуйста на мой первый вопрос.

dmitry111 27.11.2012 04:00

Atae,

да нет, Gozar, прав что поправил..

Хотя вместо фразы:
"Удалить обработчик события"
я все таки буду использовать:
"Отменить(отключить) обработчик события"

detachEvent навел на мысль кстати))

Atae 27.11.2012 04:27

что тебе вообще мешает почитать статью про события?

dmitry111 27.11.2012 05:52

так я на основе статьи заголовок и составлял))))

там и написано было что обработчик события это функция. Ну вроде бы функцию удалить же мы не можем, а событие вроде как тоже не можем, но "событие" это что-то более абстрактное, потому и написал)

Gozar 27.11.2012 11:42

Atae,
nemo? maxmax? Не гони. Хе, хе. Я почти купился. :)

Я предложил сразу постить код. Так что твоя демагогия неуместна. Есть события - абстрактные понятия, объект события со своим конструктором, функции установщик/удаление обработчиков событий и обработчики событий.

Если у тебя события означают только одно, то ты сам идиот. А лично я пытаюсь для себя узнать что-то новое или хотя бы обсуждать что-то конкретное.

Atae 27.11.2012 11:44

Gozar,
слушай я не немо, окей? я так понимаю это местный дурачек? обьясни чем знаменит сабж. хоть один пост остался?

Цитата:

Сообщение от Gozar
Я почти купился.

хэхэхэ ) я даж запятые расставил.

Gozar 27.11.2012 11:48

Цитата:

Сообщение от Atae
я не немо, окей?

НЕ ВЕРЮ. Ты немо.

Atae 27.11.2012 11:55

Цитата:

Сообщение от Gozar
Ты немо.

а вот это толсто, потмоу что кто то из моедеров говорил что у меня айпишкник татарстанский а у него другой) и ты это читал инфа 100%

я просто решил если я буду притворяться если меня будет это бесить то будут ли меня пытаться этим дразнить). вывод ясен

И да Гозар, я немо. И всегда им был. Я просто переехал.

дай ссылку на свой вконтакт, подеаноню тебя ненмого

Gozar 27.11.2012 12:14

Цитата:

Сообщение от Atae
дай ссылку на свой вконтакт, подеаноню тебя ненмого

Я не бываю вконтакте, у меня свой зоопарк есть. Ты это тоже должен был знать и ты это читал инфа 100%.

Не с той ноги встал?

Atae 27.11.2012 12:27

дда у тебя мегасайт который приносит тебе кучу бабла и при том ты младше меня на 2 года, читал читал. кинь пруф в личку гляну, досить не буду.


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