Добрый день всем
Столкнулся с утечкой памяти вот в такой конструкции:
<BODY onload='init_timers()' >
<script type="text/javascript">
function init_timers()
{
query_timer = setInterval("ExtenQuery()",5000);
ExtenQuery();
}
function ExtenQuery()
{
$.getJSON("extensions-realtime.php?show=query",
//запрос возвращает данные в таком виде:
// {
// "200_Status":"<div class='stat-1'> </div>",
// "113_Status":"<div class='stat8'> </div>",
// "200_Connected":"113",
// "200_Duration":"00:03",
// "200_Application":"Dial",
// "200_CallerID":" ",
// "200_Channel":"Local/200@from-internal-custom-3e97,2",
// "113_Connected":"200",
// "113_Duration":"00:03",
// "113_Application":"Dial",
// "113_CallerID":"menu-3 ",
// "113_Channel":"LOCAL/113@ext-local|60|S(1361)M(mname})",
// }
//размер ответа в среднем 2..4 кб.
function(obj)
{
j=j+1;//добавляем номер (с каждой итерацией увеличивается id,
//чтоб знать, где удалить старое и вписать новое
jQuery.each(obj, function(i, val)
//отражаем изменения на странице в соответствии с результатом запроса
{
$("#" + i+" div").replaceWith("<div class=\"value"+j+"\">" + val+ "</div>");
});
//удаляем старое
$(".value" + (j-1) ).replaceWith("<div class=\"value"+j+"\"> </div>");
});
}
</script>
....тут обрабатываемые объекты.....
<div class="reg1" id="exten_101">
<div class="stat0" id="101_Status"><div class="value"> </div></div>
<div class=usernum>101:</div>
<div class=username>Meleshko Ekaterina </div>
<div class=stats id="101_Connected"><div class="value"> </div></div>
<div class=stats>:</div>
<div class=stats id="101_CallerID"><div class="value"> </div></div>
<div class=time id="101_Duration"><div class="value"> </div></div>
</div>
.... таких объектов много....
<div class="reg1" id="exten_200">
<div class="stat0" id="102_Status"><div class="value"> </div></div>
<div class=usernum>200:</div>
<div class=username>Loginova Valeiya </div>
<div class=stats id="200_Connected"><div class="value"> </div></div>
<div class=stats>:</div>
<div class=stats id="200_CallerID"><div class="value"> </div></div>
<div class=time id="200_Duration"><div class="value"> </div></div>
</div>
все остальные части убрал, так как проверил их по отдельности, они не ведут к утечкам.
подозрения: jquery не очищает старый экземпляр obj; DOM каким-нибудь образом заполняется неудаленными элементами, браузер кеширует запросы (в php добавляю заголовки, чтоб не кэшировал).
Просто приложение должно работать круглосуточно, а за четыре часа работы размер окна браузера превышает 120 Мб (тестирую в хроме и лисе), что никуда не годится.
Вопрос, собственно, такой: куда посмотреть, что копнуть, чтобы обнаружить и убрать утечку памяти. Или я использую jquery неправильно, что приводит к утечкам? От jquery отказываться не хочется, т.к. удобна она уж очень...