首选的存储PHP 数组的方法 (json_encode vs serialize)

31 浏览
0 Comments

首选的存储PHP 数组的方法 (json_encode vs serialize)

我需要将多维关联数组的数据存储在一个平面文件中,以供缓存使用。偶尔需要将它转换为JSON以在我的Web应用程序中使用,但绝大多数时候我将直接在PHP中使用数组。

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

我目前倾向于将数组存储为JSON,因为我觉得它更容易被人类阅读,可以在PHP和JavaScript中都很容易使用,并且从我所读到的资料来看,解码速度甚至可能更快(编码方面不确定)。

有人知道任何缺陷吗?有人有好的基准测试来展示两种方法的性能好处吗?

admin 更改状态以发布 2023年5月25日
0
0 Comments

JSON比PHP的序列化格式更简单和更快,应该使用除非:

  • 您正在存储深嵌套的数组:
    json_decode():“如果JSON编码数据的深度超过127个元素,此函数将返回false。”
  • 您正在存储需要解凌化为正确类的对象
  • 您正在与不支持json_decode的旧PHP版本交互
0
0 Comments

这取决于你的优先事项。

如果性能是你的绝对驱动特性,那么尽一切可能使用最快的一种。但在做出选择之前,请确保你完全了解它们之间的区别。

  • serialize()不同,你需要添加额外的参数以保留UTF-8字符的原样: json_encode($array, JSON_UNESCAPED_UNICODE) (否则它会将UTF-8字符转换为Unicode转义序列)。
  • JSON不会记住对象的原始类是什么(它们总是还原为stdClass的实例)。
  • 你不能使用JSON使用__sleep()__wakeup()
  • 默认情况下,只有公共属性与JSON一起序列化。(在PHP>=5.4 中,你可以实现JsonSerializable来改变这种行为)。
  • JSON更具可移植性。

还有可能会有一些我现在想不到的其他区别。

一个简单的速度测试来比较两者


0