2012-08-06 3 views
8

Ich weiß, wie HTTP-Methoden funktionieren und für was sie entworfen sind, aber ich bin neugierig zu wissen, ob einige Methoden schneller sind als andere, wenn Sie nur Daten verwenden.
Im Team bemerkte ich, ich arbeite viel JQuery Ajax-Anfragen wie darunter:Gibt es Leistungsunterschiede bei der Verwendung verschiedener HTTP-Methoden?

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

ich natürlich ein ‚get‘ Methode verwenden würde, da keine Daten zu dieser Anfrage gesendet wird. Dies ist wahrscheinlich passiert, als ein Teamkollege Code kopiert und eingefügt hat. Das funktioniert auch gut, scheint Es gibt keinen guten Grund dafür, es zu ändern "zu bekommen".

Ich denke, mit "Get" -Methode wäre in diesem Fall schneller, aber ich habe keine Quelle finden, die das bestätigt.

Antwort

3

Es gibt einige Untersuchungen, die zeigen, dass einige Browser eine POST-Anforderung in mehrere Pakete aufteilen wird. Dies könnte Auswirkungen auf die Leistung haben, was Ihrer Meinung nach die Anforderung verlangsamen würde. Aber unter Tests scheint es, dass POST manchmal schneller sein kann. Ich bin mir nicht sicher, warum das so ist.

In der Praxis ist der Leistungsunterschied jedoch vernachlässigbar und Sie sollten POST und GET wie vorgesehen verwenden.

lesen:

+0

Beliebige andere Methoden wie PUT oder DELETE? –

+1

Keine Ahnung. Soweit ich weiß, ist das ganze Konzept der Aufspaltung einer Anfrage in mehrere Pakete eine Browser-Implementierungsentscheidung. Es gibt also keine Garantie, was ein Browser für PUT oder DELETE tun wird. Aber ich vermute, dass PUT wie ein POST behandelt wird und DELETE wahrscheinlich auch einen POST, aber ich bin weniger zuversichtlich. – Adam

0

Alle Dinge gleich ist, gibt es keinen Unterschied in der Netzwerkleistung zwischen GET, POST oder einer der anderen Methoden. Alles hängt davon ab, wie der Server eine GET vs. POST-Anfrage behandelt. Ein Server kann beispielsweise versuchen, eine Ressource im POST zu aktualisieren, aber nur bei GET nach ihr zu suchen.

Mit GET können Sie auch Daten senden. In jQuery wird es nur in die Abfragezeichenfolge serialisiert ($.get("someplace", data: { foo: "bar" }) wird als $.get("someplace?foo=bar") gesendet).

+0

Jede vertrauenswürdige Quelle auf diesem? –

2

Zumindest mit historischen Versionen von IE gibt es das Problem von POST ein zusätzliches Paket zu übertragen. Einige Diskussion dieser hier:

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

Ich weiß nicht, wie relevant diese mit der aktuellen Ernte von Browsern ist, though.

Hier sind die Ergebnisse der in dem Artikel beschriebenen Tests:

  • IE 6 - 2 Pakete
  • IE 7-2 Pakete
  • IE 8-2 Pakete
  • Firefox 3.0.13 - 1 Paket
  • Firefox 3.5.2 - 1 Paket
  • Opera 9,27-2 Pakete
  • Safari 4.0.3 - 2 Pakete
  • Chrome 2.0.172.43 - 2 Pakete
0

Es mag offensichtlich erscheinen, aber wenn POST im Vergleich zu erhalten, sind Sie ein weiteres Byte in dem Methodennamen verwenden .

Wenn Sie (wenige) Daten senden möchten, verwendet GET die URL-Codierung der Daten (das bedeutet, dass die Anzahl der generierten & gesendeten Bytes höher ist als die Datengröße selbst), während der POST mehr verbraucht Byte (im Allgemeinen), weil die Anfrage zusätzlich einen Content-Type: application/x-www-form-urlencoded Header enthält, wahrscheinlich einen Content-Length Header plus die gleichen URL-kodierten Daten als GET.

Wenn Sie einige binäre Daten senden müssen, ist die Frage nicht gültig, da Sie dies mit GET nicht tun können.

Wir Pennies sprechen hier, aber wenn man ein paar Cent akkumulieren ...

Am Ende wird die GET-Anforderung kürzer und sein für die gleiche Netzwerkverbindungsbandbreite wird als POST schneller sein.

Zum Senden binärer Daten, PUT wird schneller als POST (basierend auf der gleichen Logik, und weil POST multipart/form-data Codierung Header verwendet), aber Browser-Unterstützung ist für PUT-Anfragen begrenzt.