JQuery автоматическое обновление израсходовал БОЛЬШУЮ память браузера. Есть ли способ остановить это. У меня было 2 отделения, обновляющиеся каждые 3 секунды, но я переместил их до 9 и 15 секунд, Они помогли немногому, чем дольше окно остается открытым на моем сайте, тем больше памяти требуется до наконец катастрофические отказы браузера.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" ></script>
<script>
var auto_refresh = setInterval(
function ()
{
$('#details2').load('links2.php').fadeIn("slow");
}, 15000); // refresh every 10000 milliseconds</script>
Вы можете попробовать пропустить load() и использовать $.ajax вместо него. Я знаю, что load(); - это ajax-запрос, но мне кажется, что он забирает весь скрипт. Попробуйте запросить скрипт, выполнить вычисления в базе данных и вернуть данные в виде json. Я предполагаю, что вы отправляете полный html с данными из запроса к базе данных. Попробуйте сделать это с json вместо этого.
Вы получите данные в виде объекта, как, например, здесь.
{"variable":"foo"}
Затем вы можете получить данные с помощью простого оператора each.
$.ajax({
url: "links2.php",
type: "POST",
dataType: "json",
success: function(data){
// data here is returned as objects since it's json
$.each(data, function(key, value) {
$("#details2").empty().append(value.variable);
});
}
});
Я думаю, что это не приведет к утечке памяти и в конечном итоге к краху браузера, даже если вы будете вызывать его каждую секунду или около того. Попробуйте и дайте мне знать, как все прошло.
Удачи!
Попробуйте изменить его на это:
// ...
$('#details2').empty().load('links2.php').fadeIn('slow');
Он может перестать явно указывать jQuery, чтобы он сначала опустошил контейнер, чтобы освободить обработчики событий и т. Д. (Хотя неясно, будут ли там какие-либо обработчики .. .)
править - вообще-то неважно; Я проверил источники jQuery, и похоже, что вызов .html ()
(который, я почти уверен, выполняет load ()
) всегда вызывает empty ()
в любом случае первым.