我有这个简单的聊天工具来保持聊天室的更新:

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秒可靠地执行一次。但是我想节省带宽,所以...

我改变:

cache: false




cache: true


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

我的研究没有结果。请帮忙!

最佳答案

如果启用缓存,浏览器将缓存从先前调用到服务器的响应,并且不会进行后续调用。这是预料之中的,这是此cache: true属性设计的目的。如果要减少带宽使用,可以考虑使用推送技术,而不是定期轮询。这可以使用HTML5 WebSockets实现。在这种情况下,只要有更新发生,服务器就会向客户端推送通知,而不是客户端每2.5秒轮询一次服务器。显然,这仅在支持WebSocket的浏览器中有效,因此,如果需要支持旧版浏览器,则可能需要先进行功能检测,然后再使用它们。

关于javascript - setInterval和AJAX,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33984965/

10-12 03:35