ObjC Plist 文件读取比 JSON 更快?

Posted

技术标签:

【中文标题】ObjC Plist 文件读取比 JSON 更快?【英文标题】:ObjC Plist file read is faster then JSON? 【发布时间】:2014-10-04 12:51:14 【问题描述】:

我已经完成了这个测试项目https://github.com/danielpetroianu/FileDeserializeBenchmarking,看看我从应用程序包中读取文件并反序列化的最快方法是什么。

我惊讶地发现 Plist 文件的读取速度比 JSON 更快。由于 JSON 文件的大小更小,我预计它会更快。

Xcode 是否在构建时对 Plist 文件进行了一些优化? 我是否做错了什么导致 JSON 反序列化需要更多时间?

【问题讨论】:

您是否在构建时检查过 .plist 文件是否正在转换为二进制 .plist?检查生成的应用程序包内部。 查看opensource.apple.com/source/CF/CF-550/CFBinaryPList.c 了解如何实现二进制 plist。您可能可以比文本 json 更快地读取(健全的)二进制格式的文件。指定节的长度而不是寻找分隔符,在创建时完成更多验证等 【参考方案1】:

由于 JSON 文件更小,我预计它会更快。

您没有理由相信这一点。有许多因素比文件大小更重要。

Xcode 是否在构建时对 Plist 文件进行了一些优化

是的。如果它们在资源包中,它会将它们编译为 Plist 二进制格式,在某些情况下(实际上可能是所有情况),这种格式比文本格式读取和解析更快。这是在CopyPlistFile 构建阶段完成的。

构建后,它们的外观如下:

-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

【讨论】:

以上是关于ObjC Plist 文件读取比 JSON 更快?的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之JSON转PLIST(把存储json格式的文件转换成plist文件)

读取 .csv 文件比读取压缩为 .gz 的相同文件更快

JS动态加载JSON文件并读取数据

JS动态加载JSON文件并读取数据

我可以使用 AVAudioEngine 从文件中读取,使用音频单元处理并写入文件,比实时更快吗?

JS动态加载JSON文件并读取数据