在什么情况下使用json_encode()比使用serialize()更好?

时间:2009-09-21 03:50:48

标签: php

这就是我需要问的全部内容。检查了PHP手册并看到一条用户帖子说序列化比json_encode慢45-90%(他运行了一些基准测试)。但是“慢”的速度有多慢?我可以找到很多“对比”的东西,但是没有像我这样的初学者能够与之相关。

我刚写了一个脚本,用json编码一个数组,另一个用来解码它。我对序列化做了同样的事情。很明显,这不会告诉我他们之间有任何重大差异。

3 个答案:

答案 0 :(得分:3)

这样做10,000次(每次)(希望)对内存使用和CPU时间的差异有一个可测量的概念。

大多数情况下,差异在性能方面并不显着。在两种特殊情况下使用JSON非常有用:返回Web浏览器以及与其他应用程序(通过Web服务和其他方式)的互操作性,特别是非PHP平台上的那些应用程序。

答案 1 :(得分:2)

当你只对一些物体/阵列进行编码/序列化时,我会说速度的差异并不那么重要:你通常不会察觉它。

不同之处在于序列化特别适用于PHP;例如,使用序列化不会丢失类的信息,并且可以在反序列化时检索。

另一方面,JSON并不特定于PHP,这意味着它是一种很好的交换格式 - 它主要用于在Javascript和PHP之间交换数据。


例如,考虑这段代码:

class A {
    public $a;
    public function __construct($a) {
        $this->a = $a;
    }
}

$test = new A(10);

现在,让我们序列化并反序列化$ test:

var_dump(unserialize(serialize($test)));

我们得到:

object(A)[2]
  public 'a' => int 10

即一个对象,即A类的实例。


现在,让我们对JSON做同样的事情:

var_dump(json_decode(json_encode($test)));

我们现在只有一个stdClass实例:

object(stdClass)[2]
  public 'a' => int 10

JSON非常适合交换数据('A类'信息对PHP非常重要,但对另一个应用程序可能没什么意义);但也有其局限性。

答案 2 :(得分:1)

如果您在一个应用程序和另一个应用程序之间传输数据,通常使用 JSON编码的数据而不是 PHP序列化数据总是更好,因为后者是一种格式特定于PHP而不像JSON那样可移植。

即使在服务器和客户端都是基于PHP的情况下,您也应该使用JSON等可移植格式来允许将来创建新客户端,而无需更改服务器的响应格式。 / p>

我自己没有对这两个进行任何基准测试,但是如果你发现json编码比序列化更快,那么就更有理由使用它了。

此外,我更喜欢JSON编码数据,因为它比序列化数据更容易阅读,并且可以快速投入到firebug中进行可视化。