protobuf 文件级别优化

简介: protobuf 文件级别优化

package IM.BaseDefine;

option java_package = "com.mogujie.tt.protobuf";

option optimize_for = LITE_RUNTIME;


// service id
enum ServiceID{
  SID_LOGIN = 0x0001; // for login
  SID_BUDDY_LIST = 0x0002; // for friend list
  SID_MSG = 0x0003; //
  SID_GROUP = 0x0004; // for group message
  SID_FILE = 0x0005;
  SID_SWITCH_SERVICE = 0x0006;
  SID_OTHER = 0x0007;
  SID_INTERNAL = 0x0008;
}


  option optimize_for = LITE_RUNTIME;

     optimize_for是文件级别的选项,Protocol Buffer定义三种优化级别SPEED/CODE_SIZE/LITE_RUNTIME。缺省情况下是SPEED。


     SPEED: 表示生成的代码运行效率高,但是由此生成的代码编译后会占用更多的空间。


     CODE_SIZE: 和SPEED恰恰相反,代码运行效率较低,但是由此生成的代码编译后会占用更少的空间,通常用于资源有限的平台,如Mobile。


     LITE_RUNTIME: 生成的代码执行效率高,同时生成代码编译后的所占用的空间也是非常少。这是以牺牲Protocol Buffer提供的反射功能为代价的。因此我们在C++中链接Protocol Buffer库时仅需链接libprotobuf-lite,而非libprotobuf。在Java中仅需包含protobuf-java-2.4.1-lite.jar,而非protobuf-java-2.4.1.jar。


     SPEED和LITE_RUNTIME相比,在于调试级别上,例如 msg.SerializeToString(&str) 在SPEED模式下会利用反射机制打印出详细字段和字段值,但是LITE_RUNTIME则仅仅打印字段值组成的字符串;

 

    因此:可以在程序调试阶段使用 SPEED模式,而上线以后使用提升性能使用 LITE_RUNTIME 模式优化。

ebpf
+关注
目录
打赏
0
0
0
0
2
分享
相关文章
|
9月前
|
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
320 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
日志存储问题之不同日志工具之间的主要差别是什么
日志存储问题之不同日志工具之间的主要差别是什么
日志存储问题之不同日志工具之间的主要差别是什么
|
9月前
|
protobuf 设计,避免频繁打包更新
protobuf 设计,避免频繁打包更新
79 0
EasyExcel 百万级别数据高效率导入/导出(上)
EasyExcel 百万级别数据高效率导入/导出
4223 0
序列化性能之巅:使用Fury替换Protobuf/Flatbuffers实现10倍加速
问题背景Protobuf/Flatbuffers是业界广泛使用的序列化库,服务于大量的业务场景。但随着业务场景的复杂化,Protobuf/Flatbuffers逐渐不能满足性能需求开始成为系统瓶颈,在这种情况下,用户不得不手写大量序列化逻辑来进行极致性能优化,但这带来了三个问题:大量字段手写序列化逻辑冗长易出错;手写重复序列化逻辑开发效率低下;难以处理发送端和接收端字段变更的前后兼容性问题;这里将
2019 0
如何基于 zap 封装一个更好用的日志库
如何基于 zap 封装一个更好用的日志库
602 0
Cocos2dx的cache细节,资源路径不规范,容易导致cache中存在多份
Cocos2dx的cache细节,资源路径不规范,容易导致cache中存在多份
141 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等