非常大的HTTP请求与许多小请求

Nik*_*arg 40 json client-server

我需要一个2D数组(如Json)从服务器发送到客户端.它的大小约为400x400,每个条目大约有4个字符的文本.这样就可以获得大约640KB的数据.

以下哪种极端方法更好?

  1. 我一口气对所有数据发出大量HTTP请求.
  2. 我提出了400个请求 - 每个请求一行(大约1.6 KB)

我认为最佳方法将介于中间.任何人都可以告诉我这个数据的最佳单一请求大小是什么?

谢谢.

Fra*_*nov 67

选择一个大与几个小的考虑因素:

  • 在单一请求的情况下,您无法在数据到达时进行渐进式数据处理; 您需要等待完整的数据包到达才能执行任何操作.如果它失败了,你需要从头开始一切.
  • 在多个请求的情况下,您可以执行渐进式数据处理.但是,您现在必须考虑多个故障的可能性以及如何从这些故障中恢复.
  • 多个请求会产生每个请求的开销.这是您应用程序将消耗的额外带宽.
  • 某些HTTP代理限制了对同一服务器的并发请求数,您可能需要执行一些逻辑来解决此问题.
  • 响应压缩对单个请求案例更有效.
  • 多个请求不需要您为数据分配完整内存.当然,640KB不是那么大的内存,所以这可能不是你的一个重要考虑因素,这取决于你分配它的频率.
  • 在提前终止流程的情况下(取消按钮或应用程序终止或浏览器导航离开您的页面),单个请求仍将完成完整的响应下载; 但是,对于多个请求的情况,您的代码尚未启动的任何请求都不会被执行.

老实说,我不会那么担心最后两个并且我的选择基于1)是渐进式数据处理重要; 2)您的应用程序容差对于故障和部分数据.

  • +1我发现这个答案比目前接受的答案要好得多,因为它提供了两个选项的良好比较而不是直接答案. (10认同)

Que*_*tin 50

除非您处理缓慢(通过今天的标准非常慢)连接并且确实需要增量更新,否则请在一个请求中执行.

这为您提供了更好的压缩响应效率,并避免了额外的HTTP请求和响应头的开销.

  • +1 - 并且您避免了往返的开销.即使在20ms ...... 400个请求也会使8000ms开销= 8秒.在80ms ......(很远的地方),浪费了32秒. (4认同)
  • 那么,@ Tomom你没有考虑并行请求......!如果对并发连接没有限制,它在开始和结束时只有20ms完美连接:)如果我错了,请纠正我,它只有400 x(处理标题所需的时间)而不是400 x RTT (2认同)
  • @ZekeDran — 浏览器对并发连接数施加限制。 (2认同)