2014-10-01 2 views
1

У меня есть сайт, на котором много запросов AJAX, почти 1 раз в 2-3 секунды.AJAX Запросы, использующие 1 ГБ локальной RAM на машине

Одна вещь, которую я понял, заключается в том, что если я покину страницу дольше 20 минут, она начнет питаться через ОЗУ на машине, когда она остановится (сервер никогда не борется).

//Get the recent activity for the account 
function getRecentActivity() { 
    $.ajax({ 
     url: baseAPIurl + APIversion + "user/activity/", 
     type: "GET", 
     data: { 
      user_id: **** 
     }, 
     datatype: "json", 
     success: function (e) { 
      $("#recent_activity").empty(); 
      if (e.status == "success" && e.results != null) { 
       $.each(e.results, function (e, t) { 
        if (t["campaign_type"] == "radio") { 
         $("#recent_activity").append('<li><a href="/***?id=' + t["campaign_id"] + '"><span class="label label-blue"></span>' + t["campaign_name"] + " - " + t["user_info"]["first_name"] + " " + t["action"] + '<br /><span class="pull-right text-muted small">' + t["timestamp"] + "</span></a></li>"); 
        } 
        if (t["campaign_type"] == "online") { 
         $("#recent_activity").append('<li><a href="/***?id=' + t["campaign_id"] + '"><span class="label label-blue"></span>' + t["campaign_name"] + " - " + t["user_info"]["first_name"] + " " + t["action"] + '<br /><span class="pull-right text-muted small">' + t["timestamp"] + "</span></a></li>"); 
        } 
       }) 
      } else { 
       $("#recent_activity").append('<li><a href="#"><span class="label label-blue"></span>No Recent Activity<span class="pull-right text-muted small">&nbsp;</span></a></li>'); 
      } 
     } 
    }) 
} 

Что такое лучший способ сделать так много запросов, а не использовать 1 ГБ или более ОЗУ?

+0

Как вы вызываете периодические запросы ajax? – Cheery

+0

Спасибо Андреасу за изменения, я смотрел этот экран на 12 часов ... –

+0

@Cherry 'window.setInterval'? –

ответ

1

В соответствии с просьбой ОП, я беру это из моих комментариев:

Вместо того чтобы делать .empty() и .append(), вы могли бы попробовать пойти на .html() или .innerHTML (что было бы еще более ваниль).
Я подозреваю некоторое внутреннее кэширование jQuery для каждого .append() -call, но это можно легко проверить, используя, например, Compuware AJAX Edition (для проверки самой памяти).

1

Вместо добавления элементов html в DOM вы должны просто заменить их. Это должно решить проблему.

Пример из фрагмент кода:.

$ ("# recent_activity") HTML ('

  • ' + т [ "campaign_name"] + "-" + т [ "user_info"] [» first_name "] +" "+ t [" действие "] + '
    ' + t [" timestamp "] +"
  • ");

    +0

    см. Комментарии. «jfriend00 Я запускаю пустую() в начале функции, которая сбрасывает весь контейнер». –

    Смежные вопросы