hikarugo
V2EX  ›  问与答

一个页面要多人获取头像, base64 传输 body 巨大,有什么好办法吗

  •  
  •   hikarugo · Jun 23, 2023 · 4925 views
    This topic created in 1232 days ago, the information mentioned may be changed or developed.
    差不多 60 个人头像,base64 已经是压缩图片后编码的 b64 了,可是字符串放在 body 里还是巨大,差不多还有 4MB ,而且这个页面是会频繁刷新的,有成员变动就自动去获取新数据,几秒就干一个 4MB ,吃不消啊
    38 replies  •  2023-06-25 09:44:53 +08:00
    hefish
    hefish
    Jun 23, 2023❤️2
    1
    我们都是 Img 标签指向 jpg 就完事了。
    wolfan
    wolfan
    Jun 23, 2023
    2
    缩略一下再搞?
    hsfzxjy
    hsfzxjy
    Jun 23, 2023 via Android
    3
    所有人头像放一个请求里吗?为啥要这样
    hikarugo
    hikarugo
    OP
    Jun 23, 2023
    4
    @hefish 我也想...
    hhjswf
    hhjswf
    Jun 23, 2023 via Android
    5
    头像不都是缩略图存本地吗
    IvanLi127
    IvanLi127
    Jun 23, 2023 via Android
    6
    一个个拉呗,拉完缓存不就好了? http2 不是普及了吗?
    k9982874
    k9982874
    Jun 23, 2023 via Android
    7
    无力吐槽。。
    lalalaqwer
    lalalaqwer
    Jun 23, 2023
    8
    你们不会是把头像 base64 后存数据库吧
    opengps
    opengps
    Jun 23, 2023
    9
    页面本身不是自带缓存吗?本地有的话,刷新也就只是请求一次
    rabbbit
    rabbbit
    Jun 23, 2023
    10
    用 img 标签,浏览器会自动缓存
    可以从头像大小入手,以 Github 为例 48x48 的头像可以处理到 4kb 以下
    opengps
    opengps
    Jun 23, 2023
    11
    另外如果图片加载对页面影响大,那就单独从文件存储拉图片,不去占用后端接口服务器的带宽就好
    Trim21
    Trim21
    Jun 23, 2023
    12
    频繁刷新这个问题可以考虑在客户端 diff 一下只拉新用户的头像,模拟一下 img 标签的行为...
    felixlong
    felixlong
    Jun 23, 2023
    13
    base64 不是压缩。你把 base64 换成原始的 jpg 。每个图像差不多 5k 。啥都不用改。直接可以把 4M 变成 300K.
    Trim21
    Trim21
    Jun 23, 2023 via Android
    14
    @felixlong 他应该是只能返回 JSON 格式,所以就先压缩了图片的二进制再用 base64 编码的。
    DonaidTrump
    DonaidTrump
    Jun 23, 2023
    15
    nginx 启用 http zip ,文本的 zip 完会小很多
    muzuiget
    muzuiget
    Jun 23, 2023
    16
    为什么要这样骚? img 标签加个 lazyload 属性完事。
    jack4536251
    jack4536251
    Jun 23, 2023 via Android
    17
    @lalalaqwer 应该是,正确的做法是存路径
    SnailLin
    SnailLin
    Jun 23, 2023❤️1
    18
    槽点太多,1 、base64 不是压缩 2 、后台返回头像的 url 即可 3 、所有头像懒加载、异步加载
    Ericcccccccc
    Ericcccccccc
    Jun 23, 2023
    19
    ?

    后端肯定是返回链接地址, 哪有直接返回图片本身的.
    keenkiller
    keenkiller
    Jun 23, 2023 via Android
    20
    你这啥问题?图片不都是返回地址么
    okakuyang
    okakuyang
    Jun 23, 2023
    21
    可以用不同的压缩算法压缩响应,如果可以用二进制流传输会比 base64 小一点。base64 会膨胀一点。
    adoal
    adoal
    Jun 23, 2023
    22
    你是说把所有人的头像图片作为整体来传输,有人的改变了就把 60 个人头像的这个整体重传一边?这不是给自己找麻烦嘛。
    blankmiss
    blankmiss
    Jun 23, 2023
    23
    6 啊 这种设计真的无力吐槽
    huangzhiyia
    huangzhiyia
    Jun 23, 2023 via Android
    24
    建议接口改成 api/(unique_id).jpg
    cvbnt
    cvbnt
    Jun 23, 2023 via Android
    25
    oss ?
    nkidgm
    nkidgm
    Jun 23, 2023
    26
    其实用 base64 传输体积更大了,直接传输还省点流量。。。
    ruoxie
    ruoxie
    Jun 23, 2023
    27
    正常操作不是图片存 oss ,后端存图片地址?
    xiangyuecn
    xiangyuecn
    Jun 23, 2023❤️1
    28
    4MB/4*3=3MB ( Base64 导致增大 1MB )
    3MB/60=50KB ( 50KB 一张图,应该还能再压缩一下到 10-20KB 一张头像)

    所以,请使用 url ,依靠浏览器缓存,除了第一次 后面随便你变动,老图都没有流量消耗
    darkengine
    darkengine
    Jun 23, 2023
    29
    这实现方案是谁定的。。。
    zephyru
    zephyru
    Jun 23, 2023
    30
    读了好几遍也没弄明白这个场景为啥要用 base64..用 oss 上 cdn 吧,不行的话,前端手动实现一个缓存?感觉好像也没啥用..后端,把 base64 写成文件,提供 url 让前端用,作用估计也有限..主要不知道这里的,吃不消体现在哪里,页面卡?还是接口返回慢? 4mb 说大不大,页面我觉得很少会因为这个卡的..
    dayeye2006199
    dayeye2006199
    Jun 24, 2023
    31
    图像存在了数据库里面?
    hikarugo
    hikarugo
    OP
    Jun 24, 2023
    32
    @zephyru 页面在取到数据前会转 loading ,数据越大 loading 越久,之前有实现过 url ,体验不好,有的图片如果加载慢就是空白放着,还有可能有的图片永远加载不出来,前端没法缓存,因为有可能随机几秒到几分钟之后 60 个全变的。前端是不知道哪些是变的哪些是不变的。
    Zwying
    Zwying
    Jun 24, 2023
    33
    返回地址吧,base64 不适合
    vileer
    vileer
    Jun 24, 2023 via iPhone❤️1
    34
    @fyxtc img 标签正解,直连浏览器有缓存,后面上 cdn 也可以加速,不用回源站
    jazzg62
    jazzg62
    Jun 24, 2023❤️1
    35
    img 标签会有 onload 和 onerror 进度事件,监听就能知道哪些加载好了,哪些还在加载中,哪些加载错误
    @fyxtc
    superares
    superares
    Jun 25, 2023 via iPhone
    36
    应该是为了解决浏览器的问题:同域名并发请求数少,同时加载 60 个图片会加载很久
    okakuyang
    okakuyang
    Jun 25, 2023 via iPhone❤️1
    37
    你这个问题可以让前端去解决,因为你这需求以为是保密数据需要解密从数据库读取。如果不是的话返回地址和版本号给前端,从前端去判断哪些需要更新,缓存图片的方法很多种,如果不想缓存就给链接添加一些参数,图片加载不出来就让前端优化加载逻辑。
    hikarugo
    hikarugo
    OP
    Jun 25, 2023
    38
    @okakuyang 感谢大家,我修改一下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1915 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 178ms · UTC 01:20 · PVG 09:20 · LAX 17:20 · JFK 20:20
    ♥ Do have faith in what you're doing.