最快捷的包装

每个程序员都听说过JSON格式。 很好,易于理解,可以采用。 在大多数情况下,它用于服务器和客户端应用程序之间的通信。

但是……您可能会意识到,当您拥有大数据集以进行快速传输时,这不是最佳选择,无法真正对本机模型进行快速序列化或反序列化。 因此,还有其他一些但尚未流行的格式。

例如,谷歌使用的格式叫做Flatbuffers 。 最初,他们是为游戏开发和其他性能关键型应用程序创建的。 现在,Facebook将其用于数据传输。

在我们公司中,我们讨论了在客户端和服务器端进行JSON替换应采用的最佳格式。 由于体积小和性能好,我们观察到了MessagePack格式。

我已经在github上访问了已知的MessagePack实现,以便将其集成到我们的swift项目中。 经过一番苦苦挣扎和几次卡纸试验后,我终于找到了a2消息打包 打包和解压缩我们复杂的结构和类层次结构变得微不足道。

有关如何使用此打包程序的完整而详细的技术教程,请参见Wiki github页面

集成后,我们具有以下性能:

 优化标记=快速,iPhone 4,JSON文件大小2.7 MB(zip 190kB) 

从JSON文件加载NSData = 0.0921s
将NSData转换为JSON对象= 1.203s
JSON转换为本机模型= 3.2691s
 原始模型打包到字节数组= 3.051s 
字节数组到NSData = 0.0033s
NSData到Byte数组= 0.00390s
本地模型的字节数组= 2.6518s
将NSData写入文件= 0.101s

为了进行测试,我们有一个大的JSON文件。

字节数组表示以MessagePack格式打包的数据。

将字节数组转换为原始模型的速度明显于将标准JSON对象转换为原始模型的速度。 swift中的JSON对象表示实际上是NSDictionary或NSArray。

而且,打包的模型可以轻松转换为NSData并写入文件。 打包数据的文件大小约为743kB,比原始JSON文件小约3.5倍。 它被压缩到200kB,这与压缩后的JSON文件的大小类似。

我相信,通过一些技巧,MessagePack模块可以大大加快速度,就像在FlatBuffers格式中所做的那样,正如您在本文中所看到的。

快速应用程序中的本机模型应用程序也可以使用系统基础上的NSKeyedArchiever类保存到文件中,但事实证明,它比同样的MessagePack-ing慢几倍。

这种打包概念使您可以从Cocoa框架和NSObject类轻松地编写代码。

MessagePack格式的唯一缺陷是它的无方案。 打包数据投入生产后,很难添加或删除属性。

无论如何,MessagePack都很棒。 所以,去吧。

快乐编码