These benchmarks were done on a Macbook Pro. The results are very similar on the iPhone (ZippyJSON is 3x+ faster for all 3 files on both platforms).
ZippyJSONDecoder wherever you want to use it. So instead of
let decoder = JSONDecoder(), do
let decoder = ZippyJSONDecoder(), and everything will just work. This is because
ZippyJSONDecoder has the exact same API as
JSONDecoder (i.e. it's drop-in). Also, don't forget to add
import ZippyJSON in files where you use it.
NSJSONSerializationand then afterwards makes things Swifty. The creation of that intermediate dictionary is expensive.
NSJSONSerialization) which is generally slower.
So, it's largely due to Apple trying to be elegant and operate at a higher level.
At first, default to using
JSONDecoder. It's very battle-tested, and for plenty of use cases is just fine. Then, once you start looking for new things to optimize, take a look at how long your JSON parsing is taking. After all, JSON parsing can be a bottleneck for getting data to the user. As a rule of thumb, divide its current time taken by 4 to approximate the time taken with ZippyJSON. If that difference is significant to you (and even milliseconds can impact a user experience!), then consider using ZippyJSON.
There are still many places in the code that are ripe for optimization. Feel free to submit a ticket if you have a specific case where you need more performant JSON parsing, and where ZippyJSON is not already 4x faster than Apple's. JSONEncoder and NSJSONSerialization are also promising for optimzation, please chime in if you need one of these improved.
ZippyJSON is available through CocoaPods (SPM support is in the works). To install it, simply add the following line to your Podfile:
You can also make it
pod 'ZippyJSON', :inhibit_warnings => true if you want to suppress all warnings.
Add the package in the SwiftPM packages area with repository URL https://github.com/michaeleisel/ZippyJSON
Michael Eisel, [email protected]
|Last commit: 16 weeks ago|
codingPathin a more efficient manner when it's needed. Previously, it was done in a lazy way that could create performance pitfalls in very rare cases. There is some performance impact to the common case, but things are now more reliable, and to compensate, I've added other optimizations.
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics