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

2022-06-09 20:57:02 +08:00
 LeeReamond

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

930 次点击
所在节点    问与答
3 条回复
oldshensheep
2022-06-09 22:01:44 +08:00
浏览器其实还默认支持 Brotli 压缩算法。但是默认不支持 zstd 。

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

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

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

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

brotli 以前看过一些说法是兼容性不太行,尤其考虑到移动环境之后,所以想问问有没有用户代码层实现的压缩编码
LeeReamond
2022-06-10 00:08:30 +08:00
@oldshensheep 我说 axios 解码的意思是默认传输默认接收被解码为 string 对象,json 不支持添加 bytearray

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

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

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

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

© 2021 V2EX