ObjC Plist file read is faster then JSON?
Asked Answered
C

1

8

I've did this test project https://github.com/danielpetroianu/FileDeserializeBenchmarking to see what is the fastest way I can read a file from the app bundle and deserialize it.

I was surprised to see that Plist files are being read faster then JSON. Since JSON files are smaller as size, I expected it to be faster.

Are there some optimizations that Xcode does on Plist files on build-time ? Have I done something wrong that causes JSON deserialization take more time ?

Columella answered 4/10, 2014 at 12:51 Comment(2)
Have you checked whether the .plist files are being converted to binary .plists at build time? Check inside the produced application bundle.Coccidiosis
Take a look at opensource.apple.com/source/CF/CF-550/CFBinaryPList.c for how binary plists are implmented. You can likely read a file in a (sane) binary format much quicker than text json. Specifying lengths of sections rather than hunting for delimiters, more validation done at creation time, etcParatyphoid
B
18

Since JSON files are smaller as size, I expected it to be faster.

There's no reason you should believe that. There are many factors that are much more important than file size.

Are there some optimizations that Xcode does on Plist files on build-time

Yes. If they're in the resource bundle, it will compile them to the Plist binary format, which is faster to read and parse than text formats in some cases (probably all cases really). This is done in the CopyPlistFile build stage.

After building, here's what they look like:

-rwxr-xr-x  1 rnapier  wheel     39556 Oct  7 13:06 FileDeserializeBenchmarking
-rw-r--r--  1 rnapier  wheel       967 Oct  7 13:06 Info.plist
-rw-r--r--  1 rnapier  wheel         8 Oct  7 13:06 PkgInfo
-rw-r--r--  1 rnapier  wheel       111 Oct  7 13:06 data_dictionary_root_1.json
-rw-r--r--  1 rnapier  wheel       110 Oct  7 13:06 data_dictionary_root_1.plist
-rw-r--r--  1 rnapier  wheel       982 Oct  7 13:06 data_dictionary_root_10.json
-rw-r--r--  1 rnapier  wheel       441 Oct  7 13:06 data_dictionary_root_10.plist
-rw-r--r--  1 rnapier  wheel      9661 Oct  7 13:06 data_dictionary_root_100.json
-rw-r--r--  1 rnapier  wheel      4219 Oct  7 13:06 data_dictionary_root_100.plist
-rw-r--r--  1 rnapier  wheel     96488 Oct  7 13:06 data_dictionary_root_1000.json
-rw-r--r--  1 rnapier  wheel     37730 Oct  7 13:06 data_dictionary_root_1000.plist
-rw-r--r--  1 rnapier  wheel    965597 Oct  7 13:06 data_dictionary_root_10000.json
-rw-r--r--  1 rnapier  wheel    233071 Oct  7 13:06 data_dictionary_root_10000.plist
-rw-r--r--  1 rnapier  wheel  11655908 Oct  7 13:06 data_dictionary_root_100000.json
-rw-r--r--  1 rnapier  wheel   3343077 Oct  7 13:06 data_dictionary_root_100000.plist

$ file *.plist
Info.plist:                        Apple binary property list
data_dictionary_root_1.plist:      Apple binary property list
data_dictionary_root_10.plist:     Apple binary property list
data_dictionary_root_100.plist:    Apple binary property list
data_dictionary_root_1000.plist:   Apple binary property list
data_dictionary_root_10000.plist:  Apple binary property list
data_dictionary_root_100000.plist: Apple binary property list
Boston answered 7/10, 2014 at 17:8 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.