安卓开发 FlatBuffers能够替代JSON 吗 为什么android开发者应该使用flatbuffers替代...

\u4e3a\u4ec0\u4e48 Android \u5f00\u53d1\u8005\u5e94\u8be5\u4f7f\u7528 FlatBuffers \u66ff\u4ee3 JSON

\u7528flatbuffer\u4e0d\u5982\u7528protobuffer

\u539f\u56e0\u5e94\u8be5\u662f\u53cd\u9988\u7684JSON\u4e0d\u6807\u51c6\uff0c\u6b63\u5e38\u7684JSON\u91cc\u9762\u5e94\u8be5\u662f\u6ca1\u6709\u4e2d\u6587\u7684\uff0c\u9047\u5230\u4e2d\u6587\u4fe1\u606f\u8981\u8f6c\u6210\u5bf9\u5e94\u7684\u8f6c\u4e49\u7801\u3002\u800c\u4e14\u6211\u60f3\u5410\u69fd\u628a\u4e00\u6574\u6bb5\u6570\u7ec4\u5185\u5bb9\u653e\u5728\u7eaf\u6587\u672c\u91cc\u9762\u8fd4\u56de\u7684JSON\u5b8c\u5168\u662f\u6ca1\u6709\u4f5c\u4e3aJSON\u7684\u4ef7\u503c\u2026\u2026\u63a8\u8350\u683c\u5f0f\uff1a\u5168\u9009\u590d\u5236\u653e\u8fdb\u7b14\u8bb0{ "return": [ { "ambient": 2999, "devLocation": "\u5BA2\u5385", "dewpoint": 29, "humi": 29, "id": 647, "nodeId": 1, "temp": 29, "timestamp": "2013-12-03 11:39:20.0" }, { "ambient": 730.28, "devLocation": "\u5BA2\u5385", "dewpoint": 9.14, "humi": 52.74, "id": 646, "nodeId": 6, "temp": 19, "timestamp": "2013-11-20 11:05:56.0" } ]}

FlatBuffers vs JSON

你也许会问:既然我们已经有了标准的JSON、GSON和Jackson,为何还要使用新的工具呢?

你不妨试试FlatBuffers,你就会发它们比JSON快多了。

FlatBuffers是什么?

FlatBuffers是一个跨平台标准化的C++、C#、C、Go、Java、JavaScript、PHP和Python库。它们最早由谷歌创立,用来开发游戏和其他一些需要高性能的程序。

为什么使用latBuffers?
无需分解/拆包就能使用序列化数据——FlatBuffers最大的特点,就是它可以在二进制文件缓冲区内代表分层数据,也就是说,在无需分解和拆包的情况下,它们就可以被使用,而且同时支持数据架构演变(支持向前和向后)。

内存效率与速度——获取数据所需的唯一内存,就是缓冲内存。它不需要任何额外的内存分配(至少在C++中不需要。其它语言可能会有所不同)。
FlatBuffers还适用于mmap,内存只需要缓冲的一部分。数据使用的速度接近原架构,只需要一个额外的间接引用来允许格式演化和非强制性字段。
FlatBuffers瞄准的是那些消耗大量时间和空间(许多许多的内存分配)的项目,它让这些项目可以使用或架构那些不受欢迎的序列号数据,例如
FlatBuffers可以运用在游戏,或是其他需要消耗性能的应用中。

灵活性——拥有非强制性字段意味着你不仅可以获得优秀的前进和后退能力(在游戏中非常重要,你无需再每一个新版本中对所有数据都进行更新),还意味着你在数据写入和放弃方面,你拥有了更多的选择,在设计数据结构上面,你也有更多的选择。

对代码数量需求低——FlatBuffers只需要很少的代码,以及非常易于真核的单一小标题作为最小依赖。

编写简单——在使用的时候,错误在编写阶段就能体现出来,而不需要你进行反复的代码编写,也不需要进行运行时检查。它还会为你生成一些有用的代码。

使用方便——它所生成的C++代码便于访问,可用在结构代码中。它还有一个用于分解纲要的可选功能,以及类似JSON的文本表达功能,可以在运行时有效运转(相比JSON分解器速度更快,对内存的使用率也更高)。

跨平台,无依赖——C++代码可以兼容任何最近的gcc/clang和VS2010。它还内置了一个用于测试和样品的构建文件(安卓.mk文件,以及支持所有其他平台的cmake文件)。

是谁在使用FlatBuffers
BobbleApp是印度最受欢迎的表情贴纸应用。他们在使用FlatBuffers的过程中,大幅的提升了应用的性能。Cocos2d-x是排名第一的开源移动游戏引擎,他们也在使用Cocos2d-x来将游戏数据进行序列化处理。
Facebook也在使用FlatBuffers,他们用它来构建安卓应用中的客户服务沟通功能。他们曾经发布了一篇文章,讲述FlatBuffers对他们的帮助。

谷歌的Fun Propulsion Labs使用FlatBuffers在库和游戏的开发中大量使用FlatBuffers。

应用性能有多大的提升?

分解速度方面,在JSON上处理20KB的数据需要35毫秒,超过了UI框架刷新的间隔(16.6毫秒)。在使用JSON的时候,我们无法给用户带来顺滑的应用体验,他们在滚动UI的时候,会感到明显的延迟。

分解初始化方面。JSON的分解器需要在分解前构建field mapping,通常需要100-200毫秒。这会大大延长应用的启动时间。

垃圾收集方面,在JSON进行分解的过程中,会产生大量小对象,我们发现,当JSON对20KB的数据进行分解的时候,需要为其指派100KB的内存空间,这个Java的垃圾收集器造成了巨大的压力。
FlatBuffer vs JSON

曾经做过这样的实验,分别用FlatBuffer和JSON对4mb的文件进行分解,FlatBuffer需要1-5毫秒,而JSON需要2000毫秒。
在使用FlatBuffer的时候,应用无需调用GC;而在使用JSON的时候,GC需要被调用多次。因此,在使用JSON的时候,应用UI冻结,我只能
选在在背景中让JSON完成分解。

扩展阅读:facebook free download ... facebook downloading ... baixar facebook lite ... facebook lite 2019 ... facebook lite download ... facebook install free ... playstore+download+apk ... facebook download 2022 ... download facebook meta ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网