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 模式優化。