V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

前端有办法使用 gzip 外的协议解压二进制数据吗?

  •  
  •   LeeReamond · 2022-06-09 20:57:02 +08:00 · 993 次点击
    这是一个创建于 890 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直以来处理前端内容都是在有编码的状态下,像 json 处理的内容也必须是有编码的,axios 之类的也是自动解码,不太清楚怎么处理二进制裸流。。。最近几天后端试了试,比如一次网络请求中需要传输原始 20M 的 json 数据,如果用 gzip 编码的话每个请求都要浪费若干毫秒的时间,试了试比较新的压缩算法,其中 zstandard 可以把压缩延迟减小 90%,体积上大差不差,有点心动。想问一下这种自选协议的压缩解码 js 方面有什么处理方案吗

    3 条回复    2022-06-10 00:08:30 +08:00
    oldshensheep
        1
    oldshensheep  
       2022-06-09 22:01:44 +08:00
    浏览器其实还默认支持 Brotli 压缩算法。但是默认不支持 zstd 。

    如果你用 js 手动处理,那么前端当然可以使用其他的压缩算法,和前端处理压缩文件是一样的,当然有些请求可能处理不了。

    而前端处理压缩文件要么纯 js 要么 wasm ,调用有开销,除非你的文件特别大,不然压缩算法带来的性能提升微乎其微,不值得。

    另外浏览器的解码操作不是 js 执行的,压缩处理是 HTTP 协议里的,不是 axios 等等里的。
    LeeReamond
        2
    LeeReamond  
    OP
       2022-06-10 00:06:47 +08:00
    @oldshensheep 是的,我的意思不是能不能实现,而是具体实现上有没有什么操作建议,gh 搜 zstd 的 javascript 相关没有多少记录,感觉做的人不多。

    解码收益方面在传输数据量较大的情况下服务方能做的只是提高带宽和减小服务器压力,解码方面开销其实不是太有所谓,服务端每个请求 10ms 反应和 1ms 反应有本质区别,客户端倒是不太介意一两百毫秒的解码。

    brotli 以前看过一些说法是兼容性不太行,尤其考虑到移动环境之后,所以想问问有没有用户代码层实现的压缩编码
    LeeReamond
        3
    LeeReamond  
    OP
       2022-06-10 00:08:30 +08:00
    @oldshensheep 我说 axios 解码的意思是默认传输默认接收被解码为 string 对象,json 不支持添加 bytearray
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:43 · PVG 04:43 · LAX 12:43 · JFK 15:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.