2010-06-29 27 views
27

Tôi cần một mảng 2D (như Json) để được gửi từ máy chủ đến máy khách. Nó sẽ có kích thước khoảng 400x400 với mỗi mục nhập khoảng 4 ký tự. Vì vậy, làm cho nó xung quanh 640KB dữ liệu.Yêu cầu HTTP rất lớn so với nhiều yêu cầu nhỏ

Phương pháp tiếp cận cực đoan nào sau đây tốt hơn?

  1. Tôi thực hiện yêu cầu HTTP lớn cho tất cả dữ liệu cùng một lúc.
  2. tôi làm cho 400 yêu cầu - mỗi yêu cầu cho một hàng duy nhất (khoảng 1,6 KB)

Tôi tin rằng cách tiếp cận tối ưu sẽ là ở đâu đó ở giữa. Bất cứ ai có thể cho tôi một ý tưởng những gì có thể là kích thước yêu cầu duy nhất tối ưu cho dữ liệu này?

Cảm ơn.

Trả lời

37

Trừ khi bạn đang đối phó với chậm (rất chậm theo tiêu chuẩn ngày nay) kết nối và cập nhật thực sự cần gia tăng, làm điều đó trong một yêu cầu.

Điều đó mang lại cho bạn hiệu quả tốt hơn cho compressing the response và tránh chi phí của extra HTTP requests and response headers.

+3

+1 - và bạn tránh được phí tổn của các chuyến đi khứ hồi. Ngay cả ở 20ms .... 400 yêu cầu sẽ làm cho 8000ms trên 8 giây. Tại 80ms ... (ở xa), điều này sẽ mất 32 giây. – TomTom

+0

Cảm ơn rất nhiều đến cả David & Tom.Điều đó thực sự hữu ích. :) –

+2

Vâng, @TomTom bạn đã không yếu tố trong các yêu cầu song song ...! chỉ 20ms của nó trong đầu và cuối cùng trên một kết nối hoàn hảo nếu không có giới hạn về kết nối đồng thời :) Đúng nếu tôi sai, nó chỉ 400 x (lượng thời gian thực hiện để xử lý tiêu đề) và không 400 x RTT –

47

Couple cân nhắc cho việc lựa chọn một lớn vs vài nhỏ:

  • Trong trường hợp yêu cầu duy nhất, bạn không thể làm xử lý dữ liệu tiên tiến như các dữ liệu đến; bạn cần phải chờ cho gói đầy đủ để đến trước khi bạn có thể làm bất cứ điều gì. Nếu nó không thành công, bạn cần phải bắt đầu mọi thứ từ đầu.
  • Trong trường hợp yêu cầu nhiều, bạn có thể thực hiện xử lý dữ liệu lũy tiến. Tuy nhiên, bây giờ bạn phải xem xét tiềm năng cho nhiều thất bại và cách phục hồi từ những lỗi này.
  • Nhiều yêu cầu phải trả phí cho mỗi yêu cầu. Đây là băng thông bổ sung mà ứng dụng của bạn sẽ tiêu thụ.
  • Một số tác nhân HTTP giới hạn số lượng yêu cầu đồng thời cho cùng một máy chủ và bạn có thể cần thực hiện một số logic để giải quyết vấn đề đó.
  • Nén phản hồi sẽ hoạt động tốt hơn cho trường hợp yêu cầu duy nhất.
  • Nhiều yêu cầu sẽ không yêu cầu bạn phân bổ bộ nhớ đầy đủ cho dữ liệu của bạn. Cấp, 640KB không phải là phần lớn của bộ nhớ, do đó có thể không phải là một xem xét lớn cho bạn, tùy thuộc vào mức độ thường xuyên bạn sẽ phân bổ nó.
  • Trong trường hợp chấm dứt sớm quy trình (nút Hủy hoặc ứng dụng bị chấm dứt hoặc trình duyệt điều hướng khỏi trang của bạn), yêu cầu duy nhất sẽ vẫn hoàn tất tải xuống phản hồi đầy đủ; tuy nhiên, đối với trường hợp yêu cầu nhiều, mọi yêu cầu mã của bạn chưa bắt đầu sẽ không được thực hiện.

Thành thật mà nói, tôi sẽ không lo lắng về hai điều cuối cùng và sẽ căn cứ vào lựa chọn của tôi trên 1) là xử lý dữ liệu tiến bộ quan trọng; và 2) dung sai ứng dụng của bạn là gì đối với các lỗi và dữ liệu một phần.

+7

+1 Tôi tìm thấy câu trả lời này tốt hơn nhiều so với câu trả lời hiện tại cho một trường hợp như vậy vì nó cung cấp sự so sánh tốt về hai tùy chọn thay vì câu trả lời trực tiếp. – Wingblade