Утечки памяти в jQuery UI - PullRequest
0 голосов
/ 05 февраля 2009

У меня есть простая страница, которая состоит из таблицы с тремя jQuery UI progressbars и вызова ajax.

Ajax обращается к пустому файлу php, и в случае успеха я уничтожаю и воссоздаю свои индикаторы выполнения.

Это кажется простым, но его запуск вызвал утечки памяти как в IE7, так и Chrome (хотя Chrome справился с этим гораздо более изящно).

Вот мой код:

<script type="text/javascript" src="jQuery/js/jquery-1.3.1.js"></script>
<script type="text/javascript" src="jQuery/js/plugins/jquery-ui-1.6rc4.min.js"></script>
<link rel="stylesheet" type="text/css" href="jQuery/css/ui.all.css" />

<script type="text/javascript">
$(function(){
    timed();    
});

function timed()
{
    $.ajax({
        url: "index.php",
        success: function(msg){
            $(".progressbar").progressbar("destroy").progressbar();
        }
    });

    setTimeout("timed()",1000);
}

<table> 
<tbody>
    <tr> 
        <td>
          <div class="progressbar"></div>
        </td>
        <td>
          <div class="progressbar"></div>
        </td>
        <td>
          <div class="progressbar"></div>
        </td>
    </tr> 
</tbody>

Есть идеи, чего мне здесь не хватает?

Я пытался добавить $("*").unbind(); перед строкой $(".progressbar") в моей функции успеха.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2009

Я думаю, что я сделаю, просто создаю индикатор выполнения при запуске приложения, клонирую его и добавляю в мой шаблон после завершения его обработки. Это существенно замедляет использование памяти для сканирования (примерно 4 Кб каждые 4-5 обновлений), а не текущее (примерно 100–300 Кбайт на обновление).

0 голосов
/ 05 февраля 2009

Почему вы уничтожаете, а затем воссоздаете его? Не проще ли просто сбросить значения прогресса на ноль и оставить их в покое, пока они вам не понадобятся позже. Вы можете даже .hide (), если вы не хотите, чтобы это было видно.

...