protobuf 前端使用

45 阅读1分钟

Protobuf

概念

Protobuf是Google开发的一种数据传输格式,它是二进制的、结构化的,旨在减 少数据交换的大小和解析速度, 描述:定义对象结构,使用protobuf库将对象转换成二进制,用的时候再反序列回来 地址:github.com/protobufjs/… 参考:juejin.cn/post/684490… 相比json的优势

  1. 非明文传输
  2. 序列化速度更快
  3. 二进制传输(支持跨平台),占用存储更下,传输速度更快 缺点:网络请求看不到参数,因为转二进制了(解决:console请求参数)

使用

1.维护协议结构

微信图片_20250909155253_68_3.png

2.编译解析文件(根据定义好的协议结构生成序列函数) a: 使用protobuf-cli脚手架 b: protobuf.load全局方法

编译结构示例: 微信图片_20250909155300_69_3.png

响应类型:是arraybuffer才需要反序列,这个可以由前后端制订协议头控制

遇到的问题:

  • 1:编译完的uint8Array开辟了最大内存8192,实际不需要这么大 手动截取:buffer.slice(0,buffer.length);
  • 2:反序列时值为0的字段被过滤了,再转一次Object: xxx.toObject(data, { defaults: true });
  • 3:响应的数据不能正常 decode,可以自主转化成uint8Array再decode
    1. protobuf.util.newBuffer(response.data) 返回合法的 buf
    2. new Uint8Array(response.data); // 方法1打包报错可以使用方法2