你可能会问,既然我们已经有很标准的JSON以及转换库比如GSON和Jackson,为什么还要使用新的工具呢?
不妨先试一下FlatBuffers,然后你就会发现它比JSON快得多。
FlatBuffers是什么?
是一个高效的跨平台序列化类库,可以在C++、C#、C、Go、Java、JavaScript、PHP和Python中使用。是Google开发的,是为了应用在游戏开发,以及其他注重性能的应用上。
为什么要使用FlatBuffers?
都有谁使用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完全卡住,所以真实使用时只能在后台线程进行解析。
如何使用FlatBuffer呢?
我在我的GitHub中写了一个示例,里面手把手教你如何使用FlatBuffer。
原文链接:https://medium.freecodecamp.com/why-consider-flatbuffer-over-json-2e4aa8d4ed07