- 环境上安装protobufjs 或者 pbjs,二选一。命令为:npm install -g protobufjs npm i protobufjs-cli -g或者npm -g pbjs。
- 将.proto文件转为.json文件或者.js文件或者.ts文件。第一步安装的pbjs支持转js类文件,不支持转json文件。protobufjs支持转json、js、ts。但是protobufjs转的静态js文件很大。
- 批量转.proto文件为目标文件的命令 //批量处理proto为json文件 pbjs -t json -o test.json *.proto //批量处理proto为json文件 pbjs -t -w es6 -o User.js *.proto
- 在vue项目里使用转出来的test.json文件,首先需要安装protobufjs,执行命令npm install protobufjs.在需要解码pb数据的地方,参考一下代码 import protobuf from 'protobufjs'; import protoJson from '@/proto/test.json'; let root = protobuf.Root.fromJSON(protoJson); let ptotoData = root.lookupType('gloablMessage'); ptotoData.decode(new Unit8Array(arrayBuffer)); arrayBuffer为接受的pb二进制数据 其中gloablMessage为.proto文件里最外层的Message。
- 在vue项目里使用转出来的js文件。 import {decodeGlobal} from '@/proto/test.js'; decodeGlobal(new Unit8Array(arrayBuffer)); arrayBuffer为接受的pb二进制数据
6.json文件和js文件解码速度分析。经过对比,使用pbjs转出来的js文件,解码速度比使用json文件要快。原因pbjs转出来的js文件在接码是首先判断arrayBuffer里包含哪些Messgae字段的数据,如果没有就跳过,只解码有数据的字段,而使用protobufjs转出来的json文件,解码时调用decode,会把所有proto文件所有Messgae字段解析出来
7.文件大小对比,protobugjs转成的json文件要比pbjs转的js文件小。是js文件的三分之一。
8。按需解码,使用json文件,root.lookupType可以通过传入不同的Message实现按需加载。pbjs转出来的js文件如何实现按需解码目前还没有思路
以上仅做个人经验记录(备忘),因为写的较乱,不适合初次接触protobuf的小伙伴参考