首选的存储PHP 数组的方法 (json_encode vs serialize)
首选的存储PHP 数组的方法 (json_encode vs serialize)
我需要将多维关联数组的数据存储在一个平面文件中,以供缓存使用。偶尔需要将它转换为JSON以在我的Web应用程序中使用,但绝大多数时候我将直接在PHP中使用数组。
在这个文本文件中,将数组作为JSON还是PHP序列化数组存储更有效率?我找了一些资料,似乎在最新的PHP版本(5.3)中,json_decode
实际上比unserialize
更快。
我目前倾向于将数组存储为JSON,因为我觉得它更容易被人类阅读,可以在PHP和JavaScript中都很容易使用,并且从我所读到的资料来看,解码速度甚至可能更快(编码方面不确定)。
有人知道任何缺陷吗?有人有好的基准测试来展示两种方法的性能好处吗?
admin 更改状态以发布 2023年5月25日
JSON比PHP的序列化格式更简单和更快,应该使用除非:
- 您正在存储深嵌套的数组:
json_decode()
:“如果JSON编码数据的深度超过127个元素,此函数将返回false。” - 您正在存储需要解凌化为正确类的对象
- 您正在与不支持json_decode的旧PHP版本交互
这取决于你的优先事项。
如果性能是你的绝对驱动特性,那么尽一切可能使用最快的一种。但在做出选择之前,请确保你完全了解它们之间的区别。
- 与
serialize()
不同,你需要添加额外的参数以保留UTF-8字符的原样:json_encode($array, JSON_UNESCAPED_UNICODE)
(否则它会将UTF-8字符转换为Unicode转义序列)。 - JSON不会记住对象的原始类是什么(它们总是还原为stdClass的实例)。
- 你不能使用JSON使用
__sleep()
和__wakeup()
。 - 默认情况下,只有公共属性与JSON一起序列化。(在
PHP>=5.4
中,你可以实现JsonSerializable来改变这种行为)。 - JSON更具可移植性。
还有可能会有一些我现在想不到的其他区别。
一个简单的速度测试来比较两者