我正在开发一个Web应用程序,该应用程序需要处理服务器中的大量数据。
数据可以“流式传输”并成块处理,因此为了使其更快,我将数据分解为数据包并使用ajax下载每个数据包。
我使用javascript承诺在前一个接收到它的数据时立即发送下一个ajax请求。
每个数据包约为300KB,通常总共有20个。
现在我的问题是,当我没有将数据包分解(即我下载一个6MB的文件)时,我的浏览器/网络需要大约4秒钟来完成它。
但是,当我将其分解为数据包时,即使文件大小最终相同,浏览器也会花大约8秒钟下载所有数据包。
我希望每个请求发送新的HTTP标头等都会有一些开销……但是要慢一倍,实在令人震惊。
我试图将ajax请求移至网络工作者上,以为主线程可能会延迟它们,但是还是发生了同样的事情。
总有没有要加快此过程的速度,或者是否有任何JavaScript协议可以保持连接打开。
我知道浏览器可以通过视频流执行此操作,但是我不知道如何在二进制数据包中使用该协议。
答案 0 :(得分:1)
我相信默认情况下,浏览器中的TCP连接也受TCP拥塞控制的影响。
例如,“慢启动”可提高读取/发送数据的速率,以免使服务器不堪重负,并获得服务器可以处理的流量负载的基准。
如果您将6MB的请求分解为多个请求,则可能需要为每个请求支付“慢启动”罚款。
更多信息在这里: https://en.wikipedia.org/wiki/TCP_congestion_control
您可以尝试在服务器上打开keep-alive标头,看看这样做是否有所改善。