Утечка памяти при использовании jQuery. Get API и setTimeout - PullRequest
1 голос
/ 21 января 2011

Я использую jQuery 1.4.4 и использую API .get, чтобы проверить, нужно ли мне обновлять данные на странице или нет.Проблема в том, что где-то в фрагменте ниже есть утечка памяти, которую я не могу найти.Вы заметите, что я делаю много потенциально бесполезных вещей, таких как удаление и добавление таймера, чтобы выяснить, что происходит.Я предположил, что выполнение .load вызывало проблему, но на этом этапе .load вообще не возникает очень часто, только когда данные из .get возвращают «true», что очень редко и несовпадают с утечкой памяти, которую я вижу с помощью диспетчера задач Windows.Стоит отметить, что при использовании Firefox это вообще не протекает, похоже, это специфично для IEЯ использую IE 8, но не думаю, что это имеет большое значение.

<script>
$(document).ready(function() {
    function CheckAlerts() {
    //Must tell Ajax not to cache results
    $.ajaxSetup({ cache: false });
    $.get("AjaxDataCheck/CheckForDataRefresh.cfm", { datacheck: "MyAlerts"},
      function(data) {
       if (data.indexOf("true") >= 0) {
         $.ajaxSetup({ cache: false });
         $('#responsecontainer').load('alertchecking_Inner.cfm');
         //Clearing the timer and recreating may force gargage collection.
         clearTimeout(CheckAlertsTimer);
         delete CheckAlertsTimer;
         CheckAlertsTimer = setTimeout(CheckAlerts,2000);
       }
       else
       {
         //Clearing the timer and recreating may force gargage collection.
         clearTimeout(CheckAlertsTimer);
         delete CheckAlertsTimer;
         CheckAlertsTimer = setTimeout(CheckAlerts,2000);
       }
      });
      CheckAlertsTimer = setTimeout(CheckAlerts,2000);
   };
   CheckAlerts()
});
</script>

Спасибо!

1 Ответ

1 голос
/ 13 октября 2011

Это происходит, когда у функции load () есть проблема с освобождением элементов dom. Это характерно для IE, и обходной путь -

document.getElementById("responsecontainer").innerHTML = $('#responsecontainer').load('alertchecking_Inner.cfm');

как сообщается на http://forum.jquery.com/topic/memory-leaks-with-ajax-calls.

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