2012-02-11 50 views
0

所以使用XHR來驗證的頁面存在,他們有內容,但我們做了很多的要求,我們要裁減一些使用的帶寬。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

我不會給一個definitve的答案,但我有一些想法,是長了評論。

理論上,請求應引起底層連接的流產被關閉。假設基於TCP的通信意味着向服務器發送FIN,然後應該停止發送數據並確認FIN。但是這是HTTP,並且可能還有其他魔法正在發生(如連接流水線等)...

無論如何,當您提早關閉連接時,客戶端將收到作爲服務器以communication delay發送的所有數據將至少繼續發送,直到他獲得STOP信號。如果您有中等延遲和高帶寬連接,這可能是大量數據,並且根據數據量的不同,它們很可能是完整數據的很大一部分。

注意的是,雖然該代碼將不會收到任何這種數據時,將被轉移到所述客戶端的所述網絡設備,將是至少通過一點點向上網絡堆棧。所以,儘管這些數據永遠不會收到您的應用程序級別,但無論如何都會消耗帶寬。

我的(學歷)的猜測是,它不會保存多達你想(在「正常」的條件)。我建議你做一個真正的世界測試,看看它是否值得買得起。

+0

你說的是更先進的版本,我期待發生的,應用層面從來沒有得到的數據,但帶寬消耗是我們的目標。 感謝您的回答,但我會等待,看看是否有人可以證實這一點。 – RobertPitt 2012-02-11 11:35:41