我需要在平面文件中存储多维数据关联数组,以便进行缓存。我可能偶尔会遇到需要将其转换为JSON以在我的web应用程序中使用,但绝大多数情况下,我将直接在PHP中使用数组。

在这个文本文件中将数组存储为JSON还是PHP序列化数组更有效?我查看了一下,似乎在最新版本的PHP(5.3)中,json_decode实际上比反序列化更快。

我目前倾向于将数组存储为JSON,因为我觉得如果有必要的话,它更容易被人阅读,它可以在PHP和JavaScript中使用,而且从我所读到的,它甚至可能更快地解码(虽然不确定编码)。

有人知道有什么陷阱吗?有人有好的基准来显示这两种方法的性能优势吗?


当前回答

JSON比PHP的序列化格式更简单、更快,除非:

你正在存储深度嵌套数组: json_decode(): "如果JSON编码的数据大于127个元素,此函数将返回false。" 您存储的对象需要被反序列化为正确的类 您正在与不支持json_decode的旧PHP版本进行交互

其他回答

JSON比PHP的序列化格式更简单、更快,除非:

你正在存储深度嵌套数组: json_decode(): "如果JSON编码的数据大于127个元素,此函数将返回false。" 您存储的对象需要被反序列化为正确的类 您正在与不支持json_decode的旧PHP版本进行交互

Y刚刚测试了serialized和json的encode和decode,加上它将把字符串存储的大小。

JSON encoded in 0.067085981369 seconds. Size (1277772)
PHP serialized in 0.12110209465 seconds. Size (1955548)
JSON decode in 0.22470498085 seconds
PHP serialized in 0.211947917938 seconds
json_encode() was roughly 80.52% faster than serialize()
unserialize() was roughly 6.02% faster than json_decode()
JSON string was roughly 53.04% smaller than Serialized string

我们可以得出结论,JSON编码更快,结果字符串更小,但unserialize解码字符串更快。

我对测试进行了扩展,以包括反序列化性能。这是我得到的数字。

Serialize

JSON encoded in 2.5738489627838 seconds
PHP serialized in 5.2861361503601 seconds
Serialize: json_encode() was roughly 105.38% faster than serialize()


Unserialize

JSON decode in 10.915472984314 seconds
PHP unserialized in 7.6223039627075 seconds
Unserialize: unserialize() was roughly 43.20% faster than json_decode() 

因此json似乎编码更快,但解码较慢。因此,这可能取决于您的应用程序以及您希望最大限度地实现什么。

仅供参考——如果您想将数据序列化为易于阅读和理解的JSON,但具有更多的压缩和更高的性能,您应该检查messagpack。

似乎serialize是我要使用的一个,有两个原因:

有人指出,unserialize比json_decode更快,而且'read' case听起来比'write' case更有可能。 当使用无效UTF-8字符的字符串时,我遇到了json_encode的问题。当这种情况发生时,字符串最终为空,导致信息丢失。