V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
szyp
V2EX  ›  程序员

前端后端的各位,接口请求数据的时候,你们更喜欢哪种方式

  •  1
     
  •   szyp · 1 天前 · 2032 次点击


    如图所示,如果上面三个 Tab 栏中的数据都不相关

    你是选择:
    1. 一次性加载所有数据,前端点击直接切换
    2. 点击 Tab 栏切换请求对应的数据

    本人是后端,我更期望前端使用第二种方式去请求,这样开发的时候,调试工具更能直观的看到哪个接口出了问题,影响到什么了
    33 条回复    2025-02-25 16:30:06 +08:00
    Rennen
        1
    Rennen  
       1 天前
    接口肯定是要写三个的,一次全加载还是切换 tab 时加载前端自己决定
    fruitmonster
        2
    fruitmonster  
       1 天前
    图看不到
    qiaofanxing
        3
    qiaofanxing  
       1 天前
    @fruitmonster 我这里能看到,画的不错,请问一下用什么工具画的呀
    szyp
        4
    szyp  
    OP
       1 天前   ❤️ 1
    @qiaofanxing https://excalidraw.com/ v 站很多人讲过
    szyp
        5
    szyp  
    OP
       1 天前
    @fruitmonster 很简单我描述一下,三个 tab 栏是同时请求数据、还是点击才请求
    qinyui
        6
    qinyui  
       1 天前
    数据是固定的方式一好点,数据是动态的且希望切 tab 刷新数据就方式二
    gg85
        7
    gg85  
       1 天前
    看需求,切换频率不高的话分三次,前端加个骨架屏切换时显示
    learnshare
        8
    learnshare  
       1 天前   ❤️ 1
    显示哪个请求哪个,但原因并不是后端希望这样做。
    前端这样做,更符合按需渲染、按需加载。

    如果涉及到缓存/重复请求,或者 OP 要求方便调试,应该从其他方向解决问题。
    NathanInMac
        9
    NathanInMac  
       1 天前
    好多国产 app 就是全部加载,妈的流量刺客
    XTTX
        10
    XTTX  
       1 天前
    也得看看 A\B\C 的数据结构是不是一样的。 不一样的话,全部加载还要做额外 type 判断。

    React 的话全部 api 封装成 useDataA, useDataB, useDataC, 用起来也方便。
    7gugu
        11
    7gugu  
       1 天前
    看场景呗,数据量少的话,聚合在一块加载还是可以接受的,web 只需要请求一次,速度也很快。数据量大的话,肯定是第二个,首次加载的数据量易于控制,而且后期想要做成三个同时加载也不过是在代码里并行请求两次接口而已。
    Rache1
        12
    Rache1  
       1 天前
    @NathanInMac #9 用户体验起来快啊,至于用户有没有体验就又是另一回事儿了,哈哈
    IvanLi127
        13
    IvanLi127  
       1 天前
    后端性能没瓶颈的话,分开对大家都好。有 http2 在,也不怕浏览器堵请求。前端还能做加载优先级控制,后端也能少写点聚合接口。
    xuld
        14
    xuld  
       1 天前
    不用看评论也知道。
    后端:接口要分的越细越好,前端你来组装。
    前端:接口要越少越好,只要前端要展示的你都要一次性下发。
    阿里:前端同学、后端同学,你们表吵了,这事让中台同学来。
    sakura1988
        15
    sakura1988  
       1 天前 via Android
    就一个问题,切换 tab 刷不刷新?不刷新怎么保证实时性,刷新又何必
    sakura1988
        16
    sakura1988  
       1 天前
    @sakura1988 刷新又何必开始的时候就请求全部数据。
    chloerei
        17
    chloerei  
       1 天前 via iPhone   ❤️ 1
    后端写三个接口,前端自己维护个 BFF ( backend-for- frontend )做接口聚合。

    我不是说这是最好的,而是前后端分离之后必要的,我支持全栈。
    newbie111
        18
    newbie111  
       1 天前
    从用户体验来说选 1 ,就算选 2 也是前端说了算,前端可能同时请求了这 3 个接口
    yhxx
        19
    yhxx  
       1 天前
    我是后端的话,提供 3 个接口,前端爱怎么写怎么写
    我是架构师的话,让前端每次点击一个 tab 的时候再请求新的
    缓存、预请求之类的更深入的这里先不讨论
    redbeanzzZ
        20
    redbeanzzZ  
       1 天前
    点了再切换,不然压测时候测试搞一堆数据可能影响性能给你来个 bug
    zhengfan2016
        21
    zhengfan2016  
       23 小时 56 分钟前
    那肯定是点哪个请求哪个呀,我理解 op 为什么想要第二种,减少并发是吧哈哈哈。

    你要是想让前端按第二种改,可以使劲抓它小辫子,比如你当前在 tab1 ,但是 tab2 页后端更新数据了,切换 tab2 数据没有及时刷新,你就怼前端 tmd 怎么写出 bug 了。前端如果把切换 tab 就请求对应接口写上了,你就怼前端初始进入页面的时候请求三个接口,切换 tab 又请求接口,重复请求,又有 bug ,你们前端 xxxxx 吃的 hhh
    chihiro2014
        22
    chihiro2014  
       23 小时 33 分钟前
    一般不是看生命周期么,tab 加载和切换的时候才会取数据。一次性取三个,除非是静态数据
    blackmatch
        23
    blackmatch  
       23 小时 20 分钟前
    这不仅仅前后端协作的问题,还会涉及到用户体验的问题,如果一下子请求 3 个 tab 的数据,从技术人的角度可能会觉得对用户是友好的,提前准备好数据,能够无缝切换 tab ,但是体验上却未必:
    1. 一次请求多个 tab 页的数据会增加服务压力,可能会影响接口性能,降低整体的用户体验
    2. 提前加载数据,用户切换 tab 的时候不能及时展示最新的数据
    3.没有过度动画会给人一种“假数据/写死的数据”的错觉

    综上,个人更倾向于切换 tab 时实时请求当前页的数据。
    jamesjammy061
        24
    jamesjammy061  
       23 小时 2 分钟前
    graphql 按需取可以么,但是需要不被后端挨骂🤣,还需要老板支持
    SanjinGG
        25
    SanjinGG  
       18 小时 2 分钟前 via Android
    肯定是第二种啊,三个接口,这样数据量也小请求快,如果用户不点 bc ,也不会请求浪费资源
    RightHand
        26
    RightHand  
       13 小时 41 分钟前 via Android
    @xuld 中台:这个需求等排期
    kinghly
        27
    kinghly  
       12 小时 32 分钟前 via Android
    还有另外一种,初始化只请求第一个,闲时获取其他数据。点击切换时如果该数据未获取,则插队获取对应数据。
    egan0606
        28
    egan0606  
       11 小时 42 分钟前
    想什么呢,必须 3 个接口呀, 职责单一; 前后端分离,3 个接口, 前端按要求自行控制加载逻辑;
    buffzty
        29
    buffzty  
       10 小时 39 分钟前
    我会根据情况写 1-2 个接口,但是一次性加载 3 个 tab 的接口是必须要做的,这样用户体验较好,没有卡顿不需要等待

    首先看这个 tab 是否永远都是这 3 个会不会变成 456 个.
    第二看这些 tab 是否会分页.

    如果不分页的话直接一个接口完事,有分页就写两个接口. 1. 获取首页 tab 预览信息(即所有 tab 的前 10-20 个记录)
    2. 获取某个分类 tab 的分页数据
    zangbianxuegu
        30
    zangbianxuegu  
       10 小时 26 分钟前
    主要是考虑用户体验,并不太会影响调试。既然考虑 1 ,大概率数据不需要及时更新。在这个前提下 1 的体验好一点,请求 1 次; 2 查看了 3 个 Tab 的时候请求了 3 次。
    还要考虑场景,切换 Tab 的概率大不大。
    综合我建议 2 ,接口更清晰,能避免第一次加载过多数据,Tab loading 问题不大。2 对前端要求更高一点。
    而且如果做数据缓存,只有第一次请求的差别。
    Lemon2ee
        31
    Lemon2ee  
       9 小时 42 分钟前
    接口都写,然后根据用户习惯在前端进行预加载,能保证请求干净,并且前端体验不会很糟糕。
    niubiman
        32
    niubiman  
       6 小时 57 分钟前
    @xuld 中台这个鬼东西真的是比微服务还玄学
    wanggaoqi
        33
    wanggaoqi  
       4 小时 46 分钟前
    @blackmatch 肯定要点击后刷新,但是你没说到重点,因为你在上滑肯定有加载分页的,就这一条,就得让他实时刷新
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3116 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:16 · PVG 21:16 · LAX 05:16 · JFK 08:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.