企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 一、介绍 API文档:https://www.npmjs.com/package/protobufjs Protocol Buffers是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。它不依赖于语言和平台并且可扩展性极强。现阶段官方支持C++、JAVA、Python等三种编程语言,但可以找到大量的几乎涵盖所有语言的第三方拓展包。 ProtoBuf.js是基于ByteBuffer.js的Protocol Buffers纯Javascript实现。主要功能是解析.proto 文件,构建message类,和简单的编码、解码。 ## 二、优势 同为数据的存储格式,和json相比,Protocol Buffers的优点主要体现在性能和体积上,性能方面需要实际的测试,暂且不说,数据体积方面的优势是比较明显的,例如,一个json文件: ~~~ [ {"Name": "zhangsan", "Gender": 0, "Age": 18}, {"Name": "lisi", "Gender": 1, "Age": 19} ] ~~~ 再看一个protobuf文件: ~~~ message Person { required string Name = 1; optional int32 Gender = 2; optional int32 Age = 3; } ~~~ ## 三、安装 npm安装地址:https://www.npmjs.com/package/protobufjs ~~~ npm install protobufjs [--save --save-prefix=~] ~~~ CDN方式: ~~~ <script type="text/javascript" src="./protobuf.js"></script> ~~~ ## 四、使用 1、Load 加载(默认是相对路径引入.json文件) ~~~ var locProto, protobuf.load(BASE_ASSET_ROOT_URL+'/test.json', function(err, root) { locProto = root.lookupType("Loc.flight"); }); ~~~ 2、fromJSON加载 ~~~ var jsonDescriptor = require("./test.json"); var root = protobuf.Root.fromJSON(jsonDescriptor); var locProto = root.lookupType("Loc.flight"); ~~~ 3、通过命令行生成test.json ~~~ pbjs -t json test.proto > test.json ~~~ ## 五、修改protobuf.js里的fetch函数,使之可以域方式加载 搜索关键字 ~~~ function fetch(filename, weak) { // ... ~~~ 找到 `fetch(self.resolvePath("", filename));` 添加如下判断 ~~~ if(!/^http/.test(filename)) { if (util.isString(filename)) filename = [ filename ]; filename.forEach(function(filename) { fetch(self.resolvePath("", filename)); }); } else { fetch(filename); } ~~~ 示例: ``` protobuf.load('http://www.xxx.com/vendor/flightloc.json', function(err, root) { locProto = root.lookupType("Loc.SubscribeFlightLoc"); }); ``` 参考链接: https://www.cnblogs.com/darrenhwang/p/7058853.html