首页 > 解决方案 > Ajax 请求有多少开销

问题描述

我正在开发一个需要处理来自服务器的大量数据的网络应用程序。

数据可以“流式传输”并分块处理,因此为了加快速度,我将数据分成数据包并使用 ajax 下载每个数据包。

我使用 javascript 承诺在前一个接收到数据时发送下一个 ajax 请求。

每个数据包大约 300KB,通常总共有 20 个。

现在我的问题是,当我没有分解数据包时(即我下载一个 6MB 的文件),我的浏览器/网络需要大约 4 秒才能完成。

但是,当我将其分解为数据包时,即使文件大小最终相同,浏览器也需要大约 8 秒才能下载所有数据包。

我预计每个发送新的 http 标头等的请求都会产生一些开销......但是速度要慢两倍是相当令人震惊的。

我尝试将 ajax 请求移动到一个网络工作者身上,认为主线程可能会延迟它们,但同样的事情也会发生。

有没有办法加快这个过程,或者是否有任何 javascript 协议可以保持连接打开。

我知道浏览器可以通过视频流来做到这一点,但我不知道如何将该协议与二进制数据包一起使用。

标签: javascriptajaxperformancenetworking

解决方案


我相信默认情况下浏览器中的 TCP 连接也受 TCP 拥塞控制。

例如,“慢启动”会提高读取/发送数据的速率,以免使服务器不堪重负并获得服务器可以处理的流量负载的基线。

如果您将 6MB 请求分解为多个请求,则您可能会为每个请求支付“慢启动”罚款。

更多信息在这里: https ://en.wikipedia.org/wiki/TCP_congestion_control

您可以尝试在服务器上打开 keep-alive 标头,看看这是否会改善情况。


推荐阅读