-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
| Previous ID | SR-6252 |
| Radar | rdar://problem/35301452 |
| Original Reporter | @bjhomer |
| Type | Improvement |
Attachment: Download
Additional Detail from JIRA
| Votes | 1 |
| Component/s | Foundation, Standard Library |
| Labels | Improvement, Codable |
| Assignee | @itaiferber |
| Priority | Medium |
md5: eb4b493ba98c649f2cca2b70447bb532
Issue Description:
When converting a large JSON file, Swift's JSONDecoder type takes far longer than similar functionality from 3rd-party libraries. In investigating this, I've found that nearly all the time is spent in swift_dynamicCast(), converting from NSDictionary and [String: Any]. Since JSONSerialization produces NSDictionary objects, this conversion happens often.
In one case, involving a 7MB JSON file, I was able to cut the decoding time from ~1s to ~0.25s simply by making JSONDecoder work with NSDictionary directly, rather than converting to the Swift-native type. Since the underlying storage is already an NSDictionary for the moment, this seems like a natural optimization.
I'm attaching a test application that includes the changes to JSONDecoder. The JSON file is pulled from https://github.com/bwhiteley/JSONShootout.