我需要在平面文件中存储多维数据关联数组,以便进行缓存。我可能偶尔会遇到需要将其转换为JSON以在我的web应用程序中使用,但绝大多数情况下,我将直接在PHP中使用数组。
在这个文本文件中将数组存储为JSON还是PHP序列化数组更有效?我查看了一下,似乎在最新版本的PHP(5.3)中,json_decode实际上比反序列化更快。
我目前倾向于将数组存储为JSON,因为我觉得如果有必要的话,它更容易被人阅读,它可以在PHP和JavaScript中使用,而且从我所读到的,它甚至可能更快地解码(虽然不确定编码)。
有人知道有什么陷阱吗?有人有好的基准来显示这两种方法的性能优势吗?
您可能还会对https://github.com/phadej/igbinary感兴趣——它为PHP提供了一个不同的序列化“引擎”。
我的随机/任意的“性能”数据,使用PHP 5.3.5在64位平台上显示:
JSON:
JSON编码在2.180496931076秒
JSON解码在9.8368630409241秒
serialized "String" size: 13993
原生PHP:
PHP在2.9125759601593秒内序列化
PHP在6.4348418712616秒内反序列化
序列化的“字符串”大小:20769
Igbinary:
winigbinary在1.6099879741669秒内序列化
winigbinary在4.7737920284271秒内未序列化
WIN序列化的“字符串”大小:4467
因此,igbinary_serialize()和igbinary_unserialize()更快,使用更少的磁盘空间。
我使用fillArray(0,3)代码,但使数组键更长的字符串。
igbinary可以存储与PHP原生序列化相同的数据类型(所以对象等没有问题),如果你愿意,你可以告诉PHP5.3使用它来进行会话处理。
参见http://ilia.ws/files/zendcon_2010_hidden_features.pdf -特别是幻灯片14/15/16