将protobuf参数包装在单独的消息中是否会产生额外的运行时开销?
此:
var string1 = "orders"
var string2 = "orders/pack"
var string3 = "orders/123"
var str = "order"
console.log(string1.includes(str)); //false
console.log(string2.includes(str)); //true
console.log(string3.includes(str)); //true
VS
message MyData {
optional uint32 data = 1;
}
message Container {
optional MyData data = 1;
}
如果重要的话,我只使用C ++实现。
额外的电线开销?序列化开销?访问开销?
答案 0 :(得分:1)
根据encoding explanation of protobufs
,每个嵌入消息都有开销下面带有一个int值的简单消息将被编码为08 96 01
message Test1 {
required int32 a = 1;
}
同时,带有嵌入消息的消息定义编码看起来像1a 03 08 96 01
Test1:
message Test3 {
required Test1 c = 3;
}
文档解释说
最后三个字节与我们的第一个示例(08 96 01)完全相同,并且它们之前是数字3 - 嵌入式消息的处理方式与字符串完全相同(线型= 2)
因此,简而言之1a 03
作为开销添加到Test3
,因为Test1
是另一种消息类型