Утечки памяти в jQuery UI
У меня есть простая страница, которая состоит из таблицы с тремя 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 ответа
Я думаю, что я сделаю, просто создаю индикатор выполнения при запуске приложения, клонирую его и добавляю в свой шаблон после завершения его обработки. Это существенно замедляет использование памяти для сканирования (около 4 тыс. Каждые 4-5 обновлений), а не текущее (от 100 до 300 тыс. Обновлений).
Почему вы уничтожаете, а потом воссоздаете его? Не проще ли просто сбросить значения прогресса на ноль и оставить их в покое, пока они вам не понадобятся позже. Вы можете даже.hide(), если вы не хотите, чтобы это было видно.