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

Php 在什么情况下,使用json_encode()比使用serialize()更好?,php,Php,这就是我要问的全部问题。查看PHP手册,看到一个用户帖子说serialize比json_encode慢45-90%(他运行了一些基准测试)。但“慢”有多慢?我可以找到很多关于“对”的东西,但是像我这样的初学者都无法理解 我刚刚编写了一个脚本,用json编码了一个数组,然后用另一个脚本对其进行解码。我对serialize也做了同样的操作。很明显,这不会告诉我它们之间有什么显著的差异。这样做10000次(每次),以便(希望)对内存使用和CPU时间的差异有一个可测量的概念 在大多数情况下,性能方面的差

这就是我要问的全部问题。查看PHP手册,看到一个用户帖子说serialize比json_encode慢45-90%(他运行了一些基准测试)。但“慢”有多慢?我可以找到很多关于“对”的东西,但是像我这样的初学者都无法理解

我刚刚编写了一个脚本,用json编码了一个数组,然后用另一个脚本对其进行解码。我对serialize也做了同样的操作。很明显,这不会告诉我它们之间有什么显著的差异。

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


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

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

即使在服务器和客户机都基于PHP的情况下,您也应该使用类似JSON的可移植格式,以便在将来创建新的客户机,而不必更改服务器的响应格式

我自己还没有做过这两个方面的基准测试,但是如果你发现json编码比序列化更快,那么使用它的理由就更多了


另外,我更喜欢JSON编码的数据,因为它比序列化的数据更容易读取,并且可以很快被扔进firebug中进行可视化。

当您只对几个对象/数组进行编码/序列化时,我想说速度上的差异不会那么重要:您根本不会察觉到它

不同之处在于序列化是专门为PHP编写的;例如,serialize不会丢失类上的信息,在取消序列化时可以检索这些信息

另一方面,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
例如,一个对象,一个类的实例


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

var_dump(json_decode(json_encode($test)));
我们现在只有一个stdClass实例:

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

JSON很适合交换数据(“class A”信息对PHP很重要,但对其他应用程序可能没有多大意义);但是也有其局限性。

所以我可以用php进行json编码并将其传递给jquery脚本?@Ygam:您可以使用$.getJSON jquery函数从服务器、php或其他地方接收json数据。是的,这是编码为json的主要好处之一。Actionscript还将接受json对象