setInterval&异步传输

setInterval & AJAX

本文关键字:异步传输 amp setInterval      更新时间:2023-09-26

我有一个简单的聊天工具来更新聊天室:

setInterval (loadLog, 2500);
function loadLog(){
    //Scroll height before the request
    var oldScrollHeight = document.getElementById("chatMessages").scrollHeight - 20;
    $.ajax({
        url: "/includes/chat/log.html",
        cache: false,
        success: function(html){
            //Insert chat log into the #chatMessages div
            $("#chatMessages").html(html);
            var newScrollHeight = document.getElementById("chatMessages").scrollHeight - 20;
            if(newScrollHeight > oldScrollHeight){
                //Autoscroll to bottom of div
                $("#chatMessages").animate({scrollTop: newScrollHeight}, 'normal');
            }
        },
    });
}

大约每2.5秒可靠地执行一次。然而,我想节省带宽,所以…

I更改:

cache: false

cache: true

现在,它并不是每2.5秒就可靠地执行一次。(也许每个后续请求的时间都比前一个长?也许不是,它的行为非常奇怪)

我的研究一无所获。请帮忙<3

如果启用缓存,浏览器将缓存上一次对服务器的调用的响应,并且不会进行后续调用。这是意料之中的事,也是cache: true属性的设计初衷。如果你想减少带宽使用,你可以考虑使用推送技术,而不是定期轮询。这可以使用CCD_ 2来实现。在这种情况下,每当发生更新时,服务器都会向客户端推送通知,而不是客户端每2.5秒轮询一次服务器。显然,这只适用于支持WebSockets的浏览器,因此如果您需要支持传统浏览器,则可能需要在使用它们之前进行功能检测。