Protobuf
概念:
Protobuf是Google开发的一种数据传输格式,它是二进制的、结构化的,旨在减 少数据交换的大小和解析速度, 描述:定义对象结构,使用protobuf库将对象转换成二进制,用的时候再反序列回来 地址:github.com/protobufjs/… 参考:juejin.cn/post/684490… 相比json的优势
- 非明文传输
- 序列化速度更快
- 二进制传输(支持跨平台),占用存储更下,传输速度更快 缺点:网络请求看不到参数,因为转二进制了(解决:console请求参数)
使用
1.维护协议结构
2.编译解析文件(根据定义好的协议结构生成序列函数) a: 使用protobuf-cli脚手架 b: protobuf.load全局方法
编译结构示例:
响应类型:是arraybuffer才需要反序列,这个可以由前后端制订协议头控制
遇到的问题:
- 1:编译完的uint8Array开辟了最大内存8192,实际不需要这么大 手动截取:buffer.slice(0,buffer.length);
- 2:反序列时值为0的字段被过滤了,再转一次Object: xxx.toObject(data, { defaults: true });
- 3:响应的数据不能正常 decode,可以自主转化成uint8Array再decode
- protobuf.util.newBuffer(response.data) 返回合法的 buf
- new Uint8Array(response.data); // 方法1打包报错可以使用方法2