XHR带宽减少

时间:2012-02-11 11:12:35

标签: ajax xmlhttprequest bandwidth

所以使用XHR来验证页面是否存在并且它们有内容,但是由于我们做了很多请求,我们想要减少一些使用的带宽。

我们考虑过使用HEAD请求检查!200然后认为如果页面存在则仍然是2个请求,然后我们会提供此示例代码

Ajax.prototype.get = function (location, callback)
{
    var Request = new XMLHttpRequest();

    Request.open("GET", location, true);
    Request.onreadystatechange = function ()
    {
        if(Request.readyState === Request.HEADERS_RECEIVED)
        {
            if(Request.status != 200)
            {
                //Ignore the data to save bandwidth
                callback(Request);
                Request.abort();
            }
            else
            {
                //@Overide the callback here to assure asingle callback fire
                Request.onreadystatechange = function()
                {
                    if (Request.readyState === Request.DONE)
                    {
                        callback(Request);
                    }
                }
            }
        }
    }
    Request.send(null);
}

我想知道的是这实际上是否有效,或者响应机构是否总是回到客户端。

由于

1 个答案:

答案 0 :(得分:1)

我不会给出明确的答案,但我有一些想要征求意见的想法。

理论上,请求的中止应该导致底层连接被关闭。假设基于TCP的通信意味着向服务器发送FIN,然后服务器应该停止发送数据并确认FIN。但这是HTTP,可能还有其他魔法(如连接流水线等)......

无论如何,当您提前关闭连接时,客户端将收到communication delay中发送的所有数据,因为服务器将至少继续发送,直到他获得STOP信号。如果你有一个中等延迟和一个高带宽连接,这可能是很多数据,并且根据数据量,很可能是完整数据的很大一部分。

请注意,虽然代码不会接收任何此类数据,但它将被传输到客户端的网络设备,并且至少会在网络堆栈中传递一点点。因此,虽然这些数据永远不会收到您的应用程序级别,但无论如何都会消耗带宽。

我(受过教育的)猜测是它不会像你想的那样保存(在“正常”条件下)。我建议你做一个真实的世界测试,看看它是否值得负担得起。