2012-08-06 36 views
8

我知道HTTP方法是如何工作的,以及它們是如何設計的,但我很想知道在使用剛纔獲取數據時,某些方法是否比其他方法更快。
在我的工作我的團隊發現了很多這樣的JQuery以下Ajax請求的:使用不同的HTTP方法時有任何性能差異嗎?

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

我明明用了「獲得」的方法,因爲沒有數據發送給該請求。這可能發生在隊友複製和粘貼代碼時。這工作也很好,似乎有沒有很好的理由改變它'得到'。

我認爲在這種情況下使用'get'方法會更快,但我沒有找到任何來源確認這一點。

回答

3

有一些研究表明,某些瀏覽器將分POST請求分成多個數據包。這可能會對性能產生影響,您認爲這會使請求變慢。但是,在測試中,POST似乎有時會更快。我不確定這是爲什麼。

但實際上,性能差異可以忽略不計,您應該按照預期使用POST和GET。

閱讀:

+0

任何其他方法,如PUT或DELETE? – 2012-08-06 18:33:52

+1

不知道。據我所知,將請求分成多個包的整個概念是瀏覽器實現的決定。所以,不能保證瀏覽器會爲PUT或DELETE做些什麼。但是,我的猜測是PUT將像POST一樣處理,而DELETE可能也像POST一樣,但我對此不那麼自信。 – Adam 2012-08-06 18:39:15

0

所有情況相同,GET,POST或任何其他方法之間的網絡性能沒有差異。這完全取決於服務器如何處理GET和POST請求。例如,服務器可能嘗試在POST上更新資源,但只能在GET上進行搜索。

另外,通過GET,您可以發送數據。在jQuery中,它只是被序列化到查詢字符串中($.get("someplace", data: { foo: "bar" })被髮送爲$.get("someplace?foo=bar"))。

+0

任何可信賴的來源? – 2012-08-06 18:32:30

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包
  • 火狐3.0.13 - 1個數據包
  • Firefox 3.5.2 - 1數據包
  • Opera 9.27 - 2數據包
  • 個Safari瀏覽器4.0.3 - 2包
  • 的Chrome 2.0.172.43 - 2包
0

這似乎是顯而易見的,但使用POST與GET的時候,你在方法名稱中使用一個以上字節。此外,如果您有(少數)要發送的數據,則使用GET將對數據進行URL編碼(這意味着發送的字節數將比數據大小本身更高),而POST將消耗更多(通常),因爲該請求將另外包含Content-Type: application/x-www-form-urlencoded標頭,可能是Content-Length標頭加上相同的作爲GET的URL編碼數據。

如果您有一些要發送的二進制數據,則該問題不成立,因爲您無法使用GET進行此操作。

我們在這裏講便士,但如果你積累便士...

最後,GET請求會更短,並且對於相同的網絡鏈路帶寬,會比POST更快。

要發送二進制數據,PUT將比POST更快(基於相同的邏輯,並且由於POST將使用multipart/form-data編碼標頭),但瀏覽器支持對於PUT請求更受限制。

相關問題