这些基准测试是在 Macbook Pro 上完成的。结果在 iPhone 上非常相似(在两个平台上,对于所有 3 个文件,ZippyJSON 速度都快 3 倍以上)。
只需将 JSONDecoder
替换为 ZippyJSONDecoder
即可在任何你想使用它的地方使用。例如,将 let decoder = JSONDecoder()
替换为 let decoder = ZippyJSONDecoder()
,一切都会正常运行。 这是因为 ZippyJSONDecoder
拥有与 JSONDecoder
完全相同的 API (即,它是“即插即用”的)。 此外,请不要忘记在使用它的文件中添加 import ZippyJSON
。
NSJSONSerialization
将 JSON 转换为 NSDictionary
,然后再使其变得 Swifty。创建中间字典的开销很大。NSJSONSerialization
),这通常较慢。因此,这主要是由于 Apple 试图追求优雅并在更高层次上运行。
首先,默认使用 JSONDecoder
。它经过了充分的实战检验,并且对于许多用例来说已经足够好了。 然后,一旦您开始寻找新的优化点,请查看您的 JSON 解析花费了多长时间。 毕竟,JSON 解析可能是获取用户数据的瓶颈。 根据经验,将其当前所用时间除以 4,以近似使用 ZippyJSON 所需的时间。 如果这种差异对您来说很重要(即使是毫秒也可能影响用户体验!),那么请考虑使用 ZippyJSON。
代码中仍有许多地方可以进行优化。如果您有需要更高性能 JSON 解析的特定情况,并且 ZippyJSON 尚未比 Apple 的快 4 倍,请随时提交工单。 JSONEncoder 和 NSJSONSerialization 也很有希望进行优化,如果您需要改进其中任何一个,请随时参与。
ZippyJSON 可通过 CocoaPods 获得(SPM 支持正在开发中)。要安装它,只需将以下行添加到您的 Podfile
pod 'ZippyJSON'
如果您想禁止所有警告,您也可以将其设为 pod 'ZippyJSON', :inhibit_warnings => true
。
在 SwiftPM 包区域中添加包,仓库 URL 为 https://github.com/michaeleisel/ZippyJSON
Michael Eisel, michael.eisel@gmail.com