【Android】FlatBuffer與Json

來源:互聯網
上載者:User

標籤:

你可能會問,既然我們已經有很標準的JSON以及轉換庫比如GSON和Jackson,為什麼還要使用新的工具呢?

不妨先試一下FlatBuffers,然後你就會發現它比JSON快得多。

FlatBuffers是什嗎?

FlatBuffers是一個高效的跨平台序列化類別庫,可以在C++、C#、C、Go、Java、JavaScript、PHP和Python中使用。是Google開發的,是為了應用在遊戲開發,以及其他注重效能的應用上。

為什麼要使用FlatBuffers?

  • 不需要解析/拆包就可以訪問序列化資料 — FlatBuffers與其他庫不同之處就在於它使用二進位緩衝檔案來展示層次資料,這樣它們就可以被直接存取而不需解析與拆包,同時還支援資料結構進化(前進、後退相容性)。

  • 記憶體高效速度快 — 訪問資料時只需要訪問記憶體中的緩衝區。它不需要多餘的記憶體配置(至少在C++是這樣,其他語言中可能會有變動)。FlatBuffers還適合配合 mmap或資料流使用,只需要緩衝區的一部分儲存在記憶體中。訪問時速度接近原結構訪問,只有一點延遲(一種虛函數表vtable),是為了允許格式升級以 及可選欄位。FlatBuffers適合那些花費了大量時間和空間(記憶體配置)來訪問和構建序列化資料的項目,比如遊戲以及其他對錶現敏感的應用。可以參 考這裡的基準。

  • 靈活 — 由於有可選欄位,你不但有很強的升級和回退相容性(對於曆史悠久的遊戲尤其重要,不用為了每個版本升級所有資料),在選擇要儲存哪些資料以及設計資料結構時也很自由。

  • 輕量的code footprint — FlatBuffers只需要很少量的產生代碼,以及一個表示最小依賴的很小的標頭檔,很容易整合。細節上可以看上面的基準頁。

  • 強型別 — 編譯時間報錯,而不需要自己寫重複的容易出錯的運行時檢查。它可以自動產生有用的代碼。

  • 使用方便 — 產生的C++代碼允許精簡訪問與構建代碼。還有可選的用於實現圖表解析、類似JSON的運行時字串展示等功能的方法。(後者比JSON解析庫更快,記憶體效率更高)

  • 代碼跨平台且沒有依賴 — C++代碼可以運行在任何近代的gcc/clang和VS2010上。同時還有用於測試和範例的構建檔案(Android中.mk檔案,其他平台是cmake檔案)。

都有誰使用FlatBuffers?

  • BobbleApp,印度第一貼圖App。我們在BobbleApp中使用FlatBuffers後App的效能明顯增強。

  • Cocos2d-x,第一開源移動遊戲引擎,使用FlatBuffers來序列化所有的遊戲資料。

  • Facebook使用FlatBuffers在Android App中進行用戶端服務端的溝通。他們寫了一篇文章來描述FlatBuffers是如何加速載入內容的。

  • Google的Fun Propulsion Labs在他們所有的庫和遊戲中大量使用FlatBuffers。

App效能有多大提高?

  • 解析速度 解析一個20KB的JSON流(這差不多是BobbleApp的返回大小)需要35ms,超過了UI重新整理間隔也就是16.6ms。如果解析JSON的話,我們就在滑動時就會因為要從磁碟載入緩衝而導致掉幀(視覺上的卡頓)。

  • 解析器初始化 一個JSON解析器需要先構建欄位對應再進行解析,這會花100ms到200ms,很明顯的拖緩App啟動時間。

  • 記憶體回收 在解析JSON時建立了很多小對象,在我們的實驗中,解析20kb的JSON流時,要分配大約100kb的瞬時儲存,對Java記憶體回收造成很大壓力。

FlatBuffers vs JSON

我嘗試使用FlatBuffers和JSON解析4mb的JSON檔案。

FlatBuffers花了1-5ms,JSON花了大約2000ms。在使用FlatBuffers期間Android App中沒有GC,而在使用JSON時發生了很多次GC。在使用JSON時UI完全卡住,所以真實使用時只能在後台線程進行解析。

github源碼地址:https://github.com/amitshekhariitbhu/FlatBuffer

 

轉自oschina開源中國社區:http://www.oschina.net/news/75092/android-flatbuffers-json

 

你可能會問,既然我們已經有很標準的JSON以及轉換庫比如GSON和Jackson,為什麼還要使用新的工具呢?

不妨先試一下FlatBuffers,然後你就會發現它比JSON快得多。

FlatBuffers是什嗎?

FlatBuffers是一個高效的跨平台序列化類別庫,可以在C++、C#、C、Go、Java、JavaScript、PHP和Python中使用。是Google開發的,是為了應用在遊戲開發,以及其他注重效能的應用上。

為什麼要使用FlatBuffers?

  • 不需要解析/拆包就可以訪問序列化資料 — FlatBuffers與其他庫不同之處就在於它使用二進位緩衝檔案來展示層次資料,這樣它們就可以被直接存取而不需解析與拆包,同時還支援資料結構進化(前進、後退相容性)。

  • 記憶體高效速度快 — 訪問資料時只需要訪問記憶體中的緩衝區。它不需要多餘的記憶體配置(至少在C++是這樣,其他語言中可能會有變動)。FlatBuffers還適合配合 mmap或資料流使用,只需要緩衝區的一部分儲存在記憶體中。訪問時速度接近原結構訪問,只有一點延遲(一種虛函數表vtable),是為了允許格式升級以 及可選欄位。FlatBuffers適合那些花費了大量時間和空間(記憶體配置)來訪問和構建序列化資料的項目,比如遊戲以及其他對錶現敏感的應用。可以參 考這裡的基準。

  • 靈活 — 由於有可選欄位,你不但有很強的升級和回退相容性(對於曆史悠久的遊戲尤其重要,不用為了每個版本升級所有資料),在選擇要儲存哪些資料以及設計資料結構時也很自由。

  • 輕量的code footprint — FlatBuffers只需要很少量的產生代碼,以及一個表示最小依賴的很小的標頭檔,很容易整合。細節上可以看上面的基準頁。

  • 強型別 — 編譯時間報錯,而不需要自己寫重複的容易出錯的運行時檢查。它可以自動產生有用的代碼。

  • 使用方便 — 產生的C++代碼允許精簡訪問與構建代碼。還有可選的用於實現圖表解析、類似JSON的運行時字串展示等功能的方法。(後者比JSON解析庫更快,記憶體效率更高)

  • 代碼跨平台且沒有依賴 — C++代碼可以運行在任何近代的gcc/clang和VS2010上。同時還有用於測試和範例的構建檔案(Android中.mk檔案,其他平台是cmake檔案)。

都有誰使用FlatBuffers?

  • BobbleApp,印度第一貼圖App。我們在BobbleApp中使用FlatBuffers後App的效能明顯增強。

  • Cocos2d-x,第一開源移動遊戲引擎,使用FlatBuffers來序列化所有的遊戲資料。

  • Facebook使用FlatBuffers在Android App中進行用戶端服務端的溝通。他們寫了一篇文章來描述FlatBuffers是如何加速載入內容的。

  • Google的Fun Propulsion Labs在他們所有的庫和遊戲中大量使用FlatBuffers。

App效能有多大提高?

  • 解析速度 解析一個20KB的JSON流(這差不多是BobbleApp的返回大小)需要35ms,超過了UI重新整理間隔也就是16.6ms。如果解析JSON的話,我們就在滑動時就會因為要從磁碟載入緩衝而導致掉幀(視覺上的卡頓)。

  • 解析器初始化 一個JSON解析器需要先構建欄位對應再進行解析,這會花100ms到200ms,很明顯的拖緩App啟動時間。

  • 記憶體回收 在解析JSON時建立了很多小對象,在我們的實驗中,解析20kb的JSON流時,要分配大約100kb的瞬時儲存,對Java記憶體回收造成很大壓力。

FlatBuffers vs JSON

我嘗試使用FlatBuffers和JSON解析4mb的JSON檔案。

FlatBuffers花了1-5ms,JSON花了大約2000ms。在使用FlatBuffers期間Android App中沒有GC,而在使用JSON時發生了很多次GC。在使用JSON時UI完全卡住,所以真實使用時只能在後台線程進行解析。

【Android】FlatBuffer與Json

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.