4

私は長いポーリングajax呼び出しを続けて行おうとしています。私が現在行っている方法の問題は、前の呼び出しのコールバック関数から連続する各呼び出しを行うことです。これは問題ですか?データが返され、コールバックが実行されたとしても、Firebugは私のajax呼び出しを完了したものとして表示しません。再帰的な構造は非効率的なようです。何か案は?

window.addEvent('domready', function()
{
    server =  new Request({
    url: "chat.php",
        method: 'get',
        link:   'ignore',
        onSuccess: callback,
    });

    request = server.send();
}

function callback(data)
{
    console.log(data);
    var data = JSON.decode(data);
    messId = data.max;
    for(var i = 0; i < data.messages.length; i++)
    {
        print("", data.messages[i].text);
    }
    var sendString = "messId="+messId;
    request = server.send(sendString);
}
4

1 に答える 1

2

そうです、そのように長いポーリングを行う場合、スタックとクロージャーを目的もなく維持する必要があり、状況と実装によっては、スタックオーバーフローが発生するか、少なくともメモリが不足する可能性があります...さまざまな js 実装がどのような最適化を実行するかはわかりません (たとえば、これらの問題を解消する末尾再帰)。

簡単な代替方法は、グローバル スコープから、現在のスコープが解決されたときにwindow.setTimeout(funcName)すぐに関数を呼び出すことを使用することです。funcName

于 2010-04-10T04:34:43.670 に答える