ZippyJSON 1.2.15

ZippyJSON 1.2.15

Michael Eisel维护。



 
依赖项
ZippyJSONCFamily= 1.2.9
JJLISO8601DateFormatter= 0.1.8
 

ZippyJSON 1.2.15

  • michaeleisel

ZippyJSON

ZippyJSON是JSONDecoder的一个更快的版本

Coverage: 96% Cocoapods compatible SwiftPM compatible

基准测试

这些基准测试是在Macbook Pro上执行的。在iPhone上的结果也非常相似(ZippyJSON在这三个平台上的所有三个文件上都要快3倍以上)。

用法

只需将您想要使用的地方的JSONDecoder替换为ZippyJSONDecoder。所以,而不是let decoder = JSONDecoder(),您需要做的是let decoder = ZippyJSONDecoder(),然后一切都会正常工作。这是因为ZippyJSONDecoder有与JSONDecoder完全相同的API(即它是直接替代品)。另外,别忘了在您使用的地方的文件中添加import ZippyJSON

为什么这么快?

  • 苹果的版本首先使用NSJSONSerialization将JSON转换为NSDictionary,然后将事物变得Swifty。这个中间字典的创建代价很高。
  • ZippyJSON主要由C++构建(但仍然有一个Swift接口包围)。对于初始解析(你可以称之为标记化),它使用simdjson,一个非常快速的库,充分利用了向量化。另一方面,苹果完全使用Swift(除了使用NSJSONSerialization),这通常要慢一些。
  • 此外,还有一些具体的优化。例如,使用JJLISO8601DateFormatter进行ISO-8601日期解析比使用苹果的日期格式化器快10倍。

所以,这主要归功于苹果试图表现得优雅并操作在更高的层次。

何时使用这个库?

首先,默认使用JSONDecoder。它经过了大量的实战测试,对于许多用例来说已经足够好。然后,一旦你开始在寻找新的优化项,看看你的JSON解析需要多长时间。毕竟,JSON解析可以是获取数据到用户的一个瓶颈。作为一般原则,将当前花费的时间除以4来估算使用ZippyJSON的时间。如果这个差异对你来说意义重大(即使是毫秒也可以影响用户体验!),那么考虑使用ZippyJSON。

未来的改进

代码中仍有许多地方可以优化。如果你有特定的需要在更多高效的JSON解析,而ZippyJSON已经比苹果的快4倍,请随时提交一个工单。对于JSONEncoder和NSJSONSerialization的优化也很有前途,如果你需要这些中的一个得到改进,请提出。

安装

Cocoapods

ZippyJSON可通过CocoaPods(SWPM支持正在开发中)获取。要安装它,只需将以下行添加到您的Podfile中

pod 'ZippyJSON'

如果希望抑制所有警告,可以这样做:pod 'ZippyJSON', :inhibit_warnings => true

SwiftPM(仅限iOS)

使用存储库URLhttps://github.com/michaeleisel/ZippyJSON在SwiftPM包区域添加该包

作者

Michael Eisel,[email protected]