从性能角度:一次性取100条数据vs分100次调用?(Axios)
性能对比:单次批量请求 vs 100次单条请求
结论先行
毫无疑问,发起一次请求获取100条记录的性能要远远优于发起100次单独请求——不管是从客户端、网络还是服务器的层面来看,前者都是更优的选择,哪怕你用的是Axios这种封装完善的HTTP库。
为什么单次批量请求性能碾压?
咱们从几个核心维度拆解:
- 网络层面的重复开销:每次HTTP请求都要经历TCP三次握手、请求头部传输、响应头部接收这些步骤。100次请求意味着这些开销要重复100次,哪怕Axios帮你复用了连接池(HTTP/1.1的keep-alive),请求的头部、DNS解析(如果有的话)、服务器路由匹配这些成本还是会累加。而单次请求只需要一次握手、一次头部传输,数据体的传输效率也更高(TCP慢启动只需要经历一次)。
- 服务器负载:服务器处理100次请求需要创建100个请求上下文、做100次权限校验、100次数据库查询(如果没做批量优化的话),这对服务器的CPU、内存和数据库连接池都是极大的消耗。而单次批量请求只需要处理一次上下文,数据库可以用批量查询(比如
IN语句或者批量读取),效率提升非常明显。 - 客户端资源消耗:Axios发起100次请求,哪怕是并发发送,客户端也要维护100个请求实例、处理100次响应回调,这会占用更多的内存和事件循环资源。如果串行发送的话,总耗时会是100次请求的时间累加,用户等待时间会变得极长。
两种方案的优劣全景对比
一次性批量请求
优势
- 极致的网络和服务器资源利用率,总耗时最短
- 客户端逻辑简单,只需要处理一次请求成功/失败的回调,不需要处理竞态问题(比如先请求的后返回导致数据顺序混乱)
- 减少了跨域预检请求(如果是跨域场景)的次数,进一步降低开销
劣势
- 如果数据量极大(比如上万条),可能会导致请求超时、响应体过大占用过多内存,或者前端渲染时卡顿
- 一旦请求失败,所有数据都无法获取,需要重试整个请求
- 首屏加载时间可能较长(如果数据量很大且需要全部渲染)
分多次请求(比如分页、滚动加载)
优势
- 可以实现增量加载,首屏只加载部分数据,用户能更快看到内容
- 单个请求失败只会影响部分数据,不需要全部重试
- 响应体更小,客户端内存压力更低
- 适合数据量极大的场景,或者需要按需加载的业务(比如下拉加载更多)
劣势
- 网络开销大,总耗时通常远高于单次批量请求
- 服务器负载更高,需要处理更多请求
- 客户端逻辑复杂,要处理并发请求的顺序、去重、错误重试等问题,用Axios的话还要考虑并发控制(比如用
Promise.all但要限制并发数,避免浏览器请求队列阻塞)
基于Axios的小建议
如果你因为业务原因必须分多次请求,比如要做滚动加载,可以用Axios结合Promise.all或者自己写个简单的请求队列,限制同时发起的请求数量(比如一次发5个),避免浏览器同时发起太多请求导致阻塞。但如果没有特殊业务需求,优先选择单次批量请求。
内容的提问来源于stack exchange,提问作者farm command
相关产品推荐
相关产品推荐

