什么会影响 Ajax 调用的速度?

Sin*_*ina 1 javascript ajax performance jquery

我知道发送到服务器的数据量以及调用中返回的信息量都会影响调用的速度。

但是,我急切想知道的是,以下这些措施中的任何一项是否会对向服务器发送信息、在服务器上处理调用以及最终返回的内容产生影响:

  • 用户的网络连接速度
  • 服务器配置和速度
  • 数据类型(HTML、jsonp 等)

如果我遗漏了任何其他重要的因素,也请务必提及。

jfr*_*d00 5

以下是 Ajax 调用中的事件序列:

  1. 在客户端 Javascript 中创建 Ajax 请求
  2. 发起 Ajax 调用
  3. 浏览器查找 DNS 条目以获取目标服务器的 IP 地址
  4. 浏览器与服务器建立 TCP 连接
  5. 服务器接受传入连接
  6. 浏览器发起向服务器发送请求
  7. 网络向服务器发送请求
  8. 服务器接收传入请求并将其路由到适当的请求处理程序
  9. 服务器请求处理程序处理请求并创建响应
  10. 服务器发回响应
  11. 网络将响应返回给客户端
  12. 客户端接收响应并解析它以供代码使用
  13. 客户端代码接收 Ajax 响应
  14. TCP 连接已关闭。

许多这些步骤是连接机制。为了快速执行,所有这些连接步骤都必须快速。

您直接从客户端 Javascript 控制的步骤实际上只有 6(您发送的数据大小)和 10-11(您要求的服务器响应大小)。

许多这些步骤受网络连接的吞吐量或网络连接的延迟或两者的影响。移动连接 (3g/4g/5g) 通常比其他类型的连接具有更慢的延迟。

如您所见,许多步骤都涉及服务器的响应能力。

如果连接中涉及 SSL,那么连接机制中还有相当多的步骤。

HTTP2 连接(如果两端都支持)可以通过本质上保持连接处于活动状态以用于多个请求来加速某些连接机制,因此不必每次都从头开始创建新套接字。


客户可以做的主要事情是:

  1. 减少 Ajax 请求的数量。尝试在客户端和服务器上构建代码,以便客户端可以在一个请求中请求它需要的所有数据,而不是需要将多个不同的请求作为一个操作的一部分。
  2. 如果客户端发出多个请求,则尝试并行化它们(同时在飞行中启动多个请求),而不是发出请求,等待响应,发出下一个请求。序列化请求大大增加了端到端的时间。
  3. 通过快速网络连接。
  4. 发送所需的最小数据量。
  5. 请求所需的最少数据量。