ZippyJSON

JSONDecoder 的更快版本

Coverage: 96% Cocoapods compatible SwiftPM compatible

注意:对于 iOS 17+,JSONDecoder 比 ZippyJSON 更快。本文档的其余部分描述了 iOS 17 之前的性能差异。

基准测试

这些基准测试是在 Macbook Pro 上完成的。结果在 iPhone 上非常相似(在两个平台上,对于所有 3 个文件,ZippyJSON 速度都快 3 倍以上)。

用法

只需将 JSONDecoder 替换为 ZippyJSONDecoder 即可在任何你想使用它的地方使用。例如,将 let decoder = JSONDecoder() 替换为 let decoder = ZippyJSONDecoder(),一切都会正常运行。 这是因为 ZippyJSONDecoder 拥有与 JSONDecoder 完全相同的 API (即,它是“即插即用”的)。 此外,请不要忘记在使用它的文件中添加 import ZippyJSON

注意:在测量 ZippyJSON 的速度时,请确保您正在为 release 版本构建

为什么它如此之快?

因此,这主要是由于 Apple 试图追求优雅并在更高层次上运行。

何时应该使用此库?

首先,默认使用 JSONDecoder。它经过了充分的实战检验,并且对于许多用例来说已经足够好了。 然后,一旦您开始寻找新的优化点,请查看您的 JSON 解析花费了多长时间。 毕竟,JSON 解析可能是获取用户数据的瓶颈。 根据经验,将其当前所用时间除以 4,以近似使用 ZippyJSON 所需的时间。 如果这种差异对您来说很重要(即使是毫秒也可能影响用户体验!),那么请考虑使用 ZippyJSON。

未来改进

代码中仍有许多地方可以进行优化。如果您有需要更高性能 JSON 解析的特定情况,并且 ZippyJSON 尚未比 Apple 的快 4 倍,请随时提交工单。 JSONEncoder 和 NSJSONSerialization 也很有希望进行优化,如果您需要改进其中任何一个,请随时参与。

安装

Cocoapods

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

pod 'ZippyJSON'

如果您想禁止所有警告,您也可以将其设为 pod 'ZippyJSON', :inhibit_warnings => true

SwiftPM(仅限 iOS)

在 SwiftPM 包区域中添加包,仓库 URL 为 https://github.com/michaeleisel/ZippyJSON

作者

Michael Eisel, michael.eisel@gmail.com