2012-08-06 29 views
8

Tôi biết cách thức các phương thức HTTP hoạt động và cho những gì chúng được thiết kế, nhưng tôi tò mò muốn biết một số phương thức có nhanh hơn các phương thức khác khi sử dụng chỉ để lấy dữ liệu hay không.
Trong đội tôi đang làm việc trên tôi nhận thấy rất nhiều yêu cầu ajax JQuery như thế này dưới đây:Có bất kỳ khác biệt hiệu suất nào khi sử dụng các phương thức HTTP khác nhau không?

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

tôi rõ ràng muốn sử dụng một phương pháp 'get', như là không có dữ liệu được gửi đến yêu cầu này. Điều này có thể xảy ra khi một đồng đội đang sao chép và dán mã. Điều này cũng hoạt động tốt, dường như không có lý do chính đáng để thay đổi nó thành 'get'.

Tôi nghĩ rằng việc sử dụng phương thức 'get' sẽ nhanh hơn trong trường hợp này, nhưng tôi không tìm thấy bất kỳ nguồn nào xác nhận điều đó.

Trả lời

3

Có một số nghiên cứu cho thấy rằng một số trình duyệt sẽ chia một yêu cầu POST thành nhiều gói tin. Điều này có thể có tác động hiệu suất, mà bạn cho rằng sẽ làm cho yêu cầu chậm hơn. Nhưng, theo các bài kiểm tra, dường như POST đôi khi có thể nhanh hơn. Tôi không chắc tại sao lại như vậy.

Tuy nhiên, trong thực tế, sự khác biệt hiệu suất là không đáng kể và bạn nên sử dụng POST và GET như dự định.

đọc:

+0

Bất kỳ điểm nào trên các phương pháp khác, như PUT hoặc DELETE? –

+1

Không có ý tưởng. Theo như tôi biết toàn bộ khái niệm chia tách một yêu cầu thành nhiều gói là một quyết định thực hiện trình duyệt. Vì vậy, không có gì đảm bảo trình duyệt sẽ làm gì cho PUT hoặc DELETE. Nhưng, tôi đoán là PUT sẽ được xử lý như một POST, và DELETE có lẽ cũng giống như một POST, nhưng tôi ít tự tin hơn. – Adam

0

Mọi thứ đều bằng nhau, không có sự khác biệt về hiệu suất mạng giữa GET, POST hoặc bất kỳ phương pháp nào khác. Tất cả phụ thuộc vào cách máy chủ xử lý yêu cầu GET so với POST. Ví dụ: máy chủ có thể cố cập nhật tài nguyên trên POST nhưng chỉ tìm kiếm tài nguyên trên GET.

Ngoài ra, với GET, bạn có thể gửi dữ liệu. Trong jQuery, nó chỉ được serialized vào chuỗi truy vấn ($.get("someplace", data: { foo: "bar" }) được gửi dưới dạng $.get("someplace?foo=bar")).

+0

Bất kỳ nguồn đáng tin cậy nào về điều đó? –

2

Ít nhất với các phiên bản IE cũ, có vấn đề POST chuyển một gói phụ. Một số cuộc thảo luận về đây này:

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

Tôi không biết làm thế nào có liên quan này là với các cây trồng hiện tại của trình duyệt, mặc dù.

Dưới đây là kết quả của các cuộc thử nghiệm được mô tả trong bài viết:

  • IE 6-2 gói
  • IE 7-2 gói
  • IE 8-2 gói
  • Firefox 3.0.13 - 1 gói
  • Firefox 3.5.2 - 1 gói
  • Opera 9.27 - 2 gói
  • Safari 4.0.3 - 2 gói
  • Chrome 2.0.172.43 - 2 gói
0

Nó có vẻ hiển nhiên, nhưng khi sử dụng POST so với GET, bạn đang sử dụng một byte ở những tên phương pháp . Ngoài ra, nếu bạn có (ít) dữ liệu để gửi, sử dụng GET sẽ mã hóa URL dữ liệu (điều này có nghĩa là số byte được tạo & được gửi sẽ cao hơn kích thước dữ liệu) trong khi POST sẽ tiêu thụ nhiều hơn byte (nói chung) vì yêu cầu sẽ bổ sung chứa tiêu đề Content-Type: application/x-www-form-urlencoded, có thể là tiêu đề Content-Length cộng với cùng một dữ liệu được mã hóa URL làm GET.

Nếu bạn có một số dữ liệu nhị phân để gửi, câu hỏi sẽ không giữ vì bạn không thể thực hiện điều đó bằng GET.

Chúng tôi đang nói về đồng xu ở đây, nhưng nếu bạn tích lũy đồng xu ...

Cuối cùng, yêu cầu GET sẽ ngắn hơn và, đối với cùng một băng thông liên kết mạng, sẽ nhanh hơn POST. Để gửi dữ liệu nhị phân, PUT sẽ nhanh hơn POST (dựa trên cùng một logic và vì POST sẽ sử dụng multipart/form-data tiêu đề mã hóa), nhưng hỗ trợ trình duyệt bị hạn chế hơn đối với yêu cầu PUT.

Các vấn đề liên quan