使用不同的HTTP方法时是否存在性能差异?

时间:2012-08-06 17:51:11

标签: ajax jquery http-method

我知道HTTP方法是如何工作的以及它们的设计方式,但我很想知道在使用数据时,某些方法是否比其他方法更快。
在我正在研究的团队中,我注意到了很多类似下面的JQuery ajax请求:

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

我显然使用'get'方法,因为没有数据发送到此请求。这可能发生在队友复制和粘贴代码时。这也很好,似乎没有充分的理由将其更改为“获取”。

我认为在这种情况下使用'get'方法会更快,但我没有找到任何肯定的来源。

4 个答案:

答案 0 :(得分:3)

有一些研究表明,某些浏览器会将POST请求分成多个数据包。这可能会对性能产生影响,您认为这会使请求变慢。但是,在测试中,POST似乎有时会更快。我不确定为什么会这样。

然而,在实践中,性能差异可以忽略不计,您应该按预期使用POST和GET。

读:

答案 1 :(得分:2)

至少在IE的历史版本中,存在POST传输额外数据包的问题。这里有一些讨论:

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

我不知道这与当前的浏览器有多相关。

以下是文章中描述的测试结果:

  • IE 6 - 2个数据包
  • IE 7 - 2个数据包
  • IE 8 - 2个数据包
  • Firefox 3.0.13 - 1个数据包
  • Firefox 3.5.2 - 1数据包
  • Opera 9.27 - 2个包
  • Safari 4.0.3 - 2个包
  • Chrome 2.0.172.43 - 2个数据包

答案 2 :(得分:0)

在所有条件相同的情况下,GET,POST或任何其他方法之间的网络性能没有差异。这完全取决于服务器如何处理GET与POST请求。例如,服务器可以尝试在POST上更新资源,但仅在GET上搜索它。

此外,使用GET,您可以发送数据。在jQuery中,它只是被序列化到查询字符串中($.get("someplace", data: { foo: "bar" })被发送为$.get("someplace?foo=bar"))。

答案 3 :(得分:0)

看起来很明显,但是当使用POST与GET时,你在方法名称中再使用一个字节。

此外,如果您要发送(少量)数据,使用GET将对数据进行URL编码(这意味着生成和发送的字节数将高于数据大小本身),而POST将消耗更多字节(通常),因为请求将另外包含Content-Type: application/x-www-form-urlencoded标头,可能是Content-Length标头加上相同的 URL编码数据,如GET。

如果您要发送一些二进制数据,则问题不会成立,因为您无法使用GET进行此操作。

我们在这里谈到便士,但如果你累积便士......

最后,GET请求将更短,并且对于相同的网络链路带宽,将比POST更快。

要发送二进制数据,PUT将比POST快(基于相同的逻辑,因为POST将使用multipart/form-data编码头),但浏览器支持对PUT请求的限制更多。