2012-02-11 15 views
0

XHRを使用してページが存在するかどうかを確認していましたが、内容はありましたが、私たちはたくさんのリクエストをしていましたので、使用されている帯域幅の一部を切り捨てたいと思っていました。XHR帯域幅削減

私たちは、ある!200をチェックするためにHEAD要求を使用してについて考えた後、私が知りたいのですがどのようなページが存在する場合には、まだ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答えを与えることはありませんが、私はコメントをlongにあるいくつかの考えを持っています。

理論的には、要求の中断により、基礎となる接続が閉じられる必要があります。 TCPベースの通信を仮定すると、サーバにFINを送信し、データの送信を停止し、FINをACKする必要があります。しかし、これはHTTPであり、接続パイプラインのような他の魔法があるかもしれません...

とにかく、接続を早く終了すると、クライアントはサーバとしてcommunication delayで送信されたすべてのデータを受け取りますSTOP信号を受信するまで、少なくとも送信を続けます。中程度の遅延と高い帯域幅の接続がある場合、これは大量のデータであり、データの量に応じて、完全なデータのかなりの部分になります。

コードはこのデータを受信しませんが、クライアントのネットワークデバイスに転送され、少なくともネットワークスタックを少し上回ることに注意してください。したがって、このデータはアプリケーションレベルを受け取ることはありませんが、帯域幅はとにかく消費されます。

私が(教育的に)推測することは、あなたが望むほど(「通常の」条件で)保存しないことです。私はあなたが現実世界のテストを行い、それが余裕の価値があるかどうかを確認することをお勧めします。

+0

あなたが言ったことは、私が期待していたより進化したバージョンでした。アプリケーションレベルでデータが得られることはありませんでしたが、帯域幅の消費が私たちの目標です。 あなたの答えをありがとうが、誰かがこれを確認できるかどうかを私は待っています。 – RobertPitt

関連する問題