1

数秒ごとにノンストップで更新したいページがあります。

このために、私は次のように書きました:

var to;
$(function () {
           to = setTimeout(updateDivContent, 2000);
});

function updateDivContent() {

    $('#topbox').load('/home/blabla', null);


    $('#leftgraph').load('/home/blabla', null, function () {

        to = setTimeout(updateDivContent, 2000);
    });
};

これは機能しましたが、約15分後、ブラウザが使用可能なすべてのメモリとCPUを使用してコンピュータがフリーズしそうになるため、メモリリークが発生したと思われます。

タイムアウトは基本的にスタックしていると思いますが、これを修正する方法がわかりません。2番目のタイムアウトを取り除き、最初のタイムアウトをwhile(true)ループ内に入れようとしましたが、機能させることができませんでした。

誰かが何か提案できますか?

4

5 に答える 5

9

これは実際には問題ないようです。しかし、最初のAjax呼び出しが2秒以内に終了しない場合、それはスタックし、これ(確かにわかりませんが)問題を引き起こす可能性があります。

前のタイムアウトが終了した後にのみ新しいタイムアウトを開始するため、タイムアウト自体はスタックしません。

両方のAjaxリクエストが終了したら、新しいタイムアウトを開始してみてください。

$.when($('#topbox').load('/home/blabla'),
       $('#leftgraph').load('/home/blabla')
).then(function () {
    setTimeout(updateDivContent, 2000);
});

参照: $.when

于 2012-06-15T11:29:15.263 に答える
1

setIntervalの代わりに使う方がいいと思いますsetTimeOut

この投稿を参照してください。

于 2012-06-15T11:27:37.730 に答える
0

clearTimeout次のように、前のタイマーを無効にするために呼び出したいと思うかもしれません。

clearTimeout(to);
to = setTimeout(updateDivContent, 2000);
于 2012-06-15T11:27:40.523 に答える
0

これは2秒ごとに呼び出されますか

to = setInterval("updateDivContent", 2000);


function updateDivContent() {

$('#topbox').load('/home/blabla', null);


$('#leftgraph').load('/home/blabla', null, function () {

    //to = setTimeout(updateDivContent, 2000); 
});
};
于 2012-06-15T11:28:52.610 に答える
0

試してみてくださいsetInterval

var to;

$(function () {
    to = setInterval(updateDivContent, 2000);
});

function updateDivContent() {
    $('#topbox').load('/home/blabla', null);
    $('#leftgraph').load('/home/blabla')
};
于 2012-06-15T11:29:05.903 に答える