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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM