2012-08-06 12 views
8

私はHTTPメソッドがどのように動作するのか、どのように設計されているのか知っていますが、ちょうどデータを取得するために使用するときに、他のメソッドより速いメソッドがあるかどうか不思議です。異なるHTTPメソッドを使用するとパフォーマンスに違いはありますか?

$.ajax({url: "../dir/someFile.json", method: 'post', dataType: 'json', 
    error: function(...){ ... }, 
    success: function(...){ ... }  
}); 

何もデータがこの要求に送信されませんように私は明らかに、「getメソッドを使用したい:私は私に取り組んでいるチームで
は、以下のようなjQueryのアヤックスの要求の多くを気づきました。これはおそらく、チームメイトがコードをコピーして貼り付けるときに起こりました。これもうまくいきます。のように見えますが、「get」に変更する必要はありません。

この場合、「取得」方法を使用する方が高速だと思いますが、それを確認するソースは見つかりませんでした。

答えて

3

一部のブラウザは、複数のパケットにPOST要求を分割することを示すいくつかの研究があります。これはパフォーマンスに影響を与える可能性があります。これはリクエストを遅くすると思われます。しかし、テストの下ではPOSTが時には高速になるようです。なぜこのことが分かりませんか?

しかし実際には、パフォーマンスの差はごくわずかです。意図したとおりにPOSTとGETを使用する必要があります。

読む:

+0

PUTやDELETEのような他の方法にもかかわらず? –

+1

いいえ、考えられません。私の知る限り、リクエストを複数のパケットに分割するという全体のコンセプトは、ブラウザ実装の決定です。したがって、ブラウザーがPUTまたはDELETEのために何を行うかは保証されていません。しかし、私の推測では、PUTはPOSTのように扱われ、おそらくPOSTのようなDELETEもありますが、私はそのことに自信がありません。 – Adam

0

すべてが同じであるため、GET、POST、または他の方法の間でネットワークパフォーマンスに違いはありません。それは、サーバーがGET対POST要求をどのように処理するかによって異なります。たとえば、サーバーはPOSTでリソースを更新しようとしますが、GETでリソースを検索するだけです。

また、GETを使用すると、データを送信できます。 jQueryでは、クエリ文字列にシリアライズされます($.get("someplace", data: { foo: "bar" })$.get("someplace?foo=bar")として送信されます)。

+0

信頼できるソースはありますか? –

2

IEの履歴バージョンでは、少なくともPOSTで余分なパケットを転送するという問題があります。ここでは、このいくつかの議論:

http://josephscott.org/archives/2009/08/xmlhttprequest-xhr-uses-multiple-packets-for-http-post/

は、私はしかし、これはブラウザの現在の作物であるどのように関連するかわかりません。 - 2パケット

  • IE 7 - 2パケット
  • IE 8から2パケット
  • のFirefox 3.0.13

    • IE 6:ここ

      は資料に記載された試験の結果であります - 1パケット

    • Firefox 3.5.2 - 1パケット
    • Opera 9.27 - 2パケット
    • のサファリ4.0.3 - 2パケット
    • クロム2.0.172.43 - 2つのパケット
  • 0

    それは明らかに思えるかもしれないが、GET対POSTを使用しているとき、あなたはメソッド名に1つのより多くのバイトを使用しています。

    さらに、送信するデータが少ない場合、GETを使用するとデータがURLエンコードされます(これは、生成された&のバイト数がデータサイズよりも高くなることを意味します)。 (通常は)Content-Type: application/x-www-form-urlencodedヘッダー(おそらくContent-Lengthヘッダーとと同じのGETのようなURLエンコードされたデータ)が要求に追加で含まれるためです。

    送信するバイナリデータがある場合は、GETで送信できないため、質問は成立しません。

    ここではペニーの話されているが、あなたはペニーを蓄積している場合...最後に

    、GETリクエストが短くなりますと、同じネットワークリンクの帯域幅のために、POSTよりも速くなります。

    バイナリデータを送信するには、PUTはPOSTより速く(同じロジックに基づいて、POSTはmultipart/form-dataエンコーディングヘッダーを使用するため)、ブラウザサポートはPUTリクエストに対してより制限されます。

    関連する問題