Может ли это вызвать утечку памяти JavaScript? - PullRequest
0 голосов
/ 13 июля 2011

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

Используя jQuery, я связываю и запускаю пользовательские события для элемента body. Когда событие срабатывает, я сохраняю его в списке запущенных событий. Одна из вспомогательных функций, которую я использую, называется «waitfor». Вот некоторый псевдокод:

waitfor = function(event, callback){

  if(event_has_ever_been_called){
    callback(); //RUN IMMEDIATELY
  }
  else{
    //BIND CALLBACK TO RUN AS SOON AS THE EVENT IS TRIGGERED
    $("body").bind(event, function(){
      callback();
    });
  }
}

Например,

//ADD GOOGLE MAP TO PAGE
... listen for the google map 'idle' event, 
... then call $("body").trigger("gmap.ready") 

//ADD MARKERS AS SOON AS POSSIBLE (BUT NOT BEFORE)
waitfor("gmap.ready", function(){
  //add markers
});

Мне это кажется очень простым, но меня немного беспокоит, что это (или любая из моих других функций, использующих функции анонимного обратного вызова) может вызывать высокое использование памяти.

Достаточно ли этой информации, чтобы определить, является ли данная функция безопасной / небезопасной?

1 Ответ

0 голосов
/ 13 июля 2011

Вы должны вызвать one вместо bind, чтобы удалить обработчик после возникновения события.

В противном случае ваша функция и все, на что ссылается ее закрытие, останутся ссылкаминавсегда в списке обработчиков jQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...