前端一次性发起多个请求发现返回的请求时间太长 ,是前端原因还是后端

2019-07-08 10:21:20 +08:00
 chenlaocong

有一个需求是前端一次性请求 10 个接口,等 10 个接口全部请求完毕之后前端再解析。 但是发现 10 个接口中总是有几个接口过慢。差不多 10 秒钟,然后后端打日志,发现数据库请求加后端程序处理只用了 2 秒左右。于是查看前端 network 的时间,发现其余的 8 秒发现是花费在了 ttfb 上,查了一下 TTFB 指的是前端发起请求到后端接受第一个字节所需要的时间。

那么问题就来了,这个 TTFB 是前端的原因还是后端的,会不会是 mysql 或者 es 多个访问阻塞了,或者是因为 nginx 配置,或许可能是服务器性能差?要怎么优化这个时间,有经验的大佬请回答下。 PS 我是前端,不太懂服务端这些 nginx 配置啥的

11600 次点击
所在节点    程序员
45 条回复
IsaacYoung
2019-07-08 10:36:59 +08:00
浏览器同一域名下并发请求数量有限制
话说你一开始就 10 个请求是不是考虑下设计上的问题
oatw
2019-07-08 10:39:21 +08:00
一楼正解。

如果受制于后端接口,考虑一下把不在首屏显示的内容相关接口延迟请求,最好还是在接口数量的问题上做优化。
seansong
2019-07-08 10:39:30 +08:00
ttfb 是服务器响应时间吧,也就是服务器那边慢了,最好彻查一下整个完整的链路,你请求发到服务器之后,首先接收的应该是 nginx 之类的,然后才转发到后端 tomcat 之类,然后才是代码过程,卡住的不一定是代码过程
fortunezhang
2019-07-08 10:42:38 +08:00
前端:promose.all
后端:再封装一下
zqx
2019-07-08 10:43:09 +08:00
浏览器一个进程页面一般只能并发 6-8 个请求
chenlaocong
2019-07-08 10:45:17 +08:00
@IsaacYoung
@oatw
@zqx
谢谢 不过我把接口减少到 6 个也是有一两个是比较慢的
chenlaocong
2019-07-08 10:46:03 +08:00
@fortunezhang 目前就是 promise.all 的前端 后端的话是不是因为不能同时接受这个多请求吗
royzxq
2019-07-08 10:46:16 +08:00
一次 10 个接口,是个狼灭
chenlaocong
2019-07-08 10:47:08 +08:00
@seansong 谢谢 后端代码是没问题的 估计是 nginx 或者是数据库的或者是服务器性能的问题
learnshare
2019-07-08 10:47:13 +08:00
前端堵塞吧,把请求分两组(两个 Promise.all )发出去试试
chenlaocong
2019-07-08 10:48:05 +08:00
@royzxq 因为要 10 个接口聚合来进行前端的展示 前端传不同的参数 请求的是后端的同一个封装好的接口
chenlaocong
2019-07-08 10:48:33 +08:00
@learnshare 谢谢 我分成两个试一下
seeusoon
2019-07-08 10:48:34 +08:00
多个接口换到不同的域名下试试
仔细看一楼说的,同一域名下同时的网络请求数目是有限制的
chenlaocong
2019-07-08 10:59:01 +08:00
@seeusoon 我在本地浏览器打开请求本地的后端 是正常速度 崩溃了
azh7138m
2019-07-08 11:09:11 +08:00
HTTP2,请
15651980765
2019-07-08 11:09:38 +08:00
实在想象不到一次使用 10 个接口的场景;难道不可以让后台合并数据统一返回吗?
之前我们项目也有个列表每一项都发一条请求,导致加载极慢,后来后台合并成一个接口,前端再拆分。
f056917
2019-07-08 11:11:04 +08:00
@chenlaocong 用 postman 试呀
f056917
2019-07-08 11:12:25 +08:00
话说回来,最好的方法还是重新设计
CodeCore
2019-07-08 11:12:28 +08:00
合并接口, 不同的参数, 就多传参数. 也比那么多接口好. 这还是延迟, 如果其中一两个不返回,或者延迟再高点, 不就跪了.
glaucus
2019-07-08 11:14:32 +08:00
我和楼主一样,是一个 Dashboard 项目,需要异步同时请求 10 来个接口,看了这个帖子打算回去优化一下了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/580906

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX