2009-09-21 39 views
3

这就是我需要问的所有问题。检查了PHP手册,看到一篇用户帖子说serialize比json_encode慢45-90%(他跑了一些基准测试)。但是“慢”怎么慢呢?我可以找到很多“对比”的东西,但没有一个像我这样的初学者可以涉及到。在什么情况下使用json_encode()比使用serialize()更好?

我刚刚写了一个脚本,它在json中编码一个数组,并且另一个脚本将它解码。我对serialize做了同样的处理。明显地,这不会告诉我他们之间有任何显着的差异。

+0

重复http://stackoverflow.com/questions/804045/preferred-method-to-store-php-arrays-json-encode-vs-serialize – 2011-05-04 23:18:20

回答

1

如果你在一个应用程序,另一个之间传输数据,它通常是几乎总是更好地使用JSON编码数据,而不是PHP序列数据作为后来是具体到PHP和不一样便携JSON格式。

即使在服务器和客户端都是基于PHP的情况下,您也应该使用便携式格式(如JSON)来允许将来创建新客户端,而无需更改服务器的响应格式。

我还没有对这两个人进行任何基准测试,但是如果您发现json编码比序列化更快,那么比使用它的更多理由。

此外,我更喜欢JSON编码的数据,因为它比序列化数据更容易阅读,并且可以很快被扔进萤火虫中以便可视化。

3

做10000次(每次)(希望)得到一个可测量的内存使用率和CPU时间差异的想法。

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

+0

所以我可以在php中做一个json编码,并将其传递给一个jQuery脚本? – yretuta 2009-09-21 03:59:46

+0

@Ygam:您可以使用$ .getJSON jQuery函数从服务器,PHP或其他平台接收JSON数据。 – 2009-09-21 04:00:26

+0

是的,这是编码为json的主要好处之一。 Actionscript也会接受json对象。 – 2009-09-21 04:01:07

2

当你只对一些对象/数组进行编码/序列化时,我会说速度上的差异并不那么重要:你一定会觉察不到它。

不同之处在于serialize是专门为PHP制作的;例如,作为类的信息不会随着序列化而丢失,并且在反序列化时可以被检索。另一方面,JSON并不特定于PHP,这意味着它是一种很好的交换格式 - 其主要用途是在Javascript和PHP之间交换数据。


例如,考虑这段代码:

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

$test = new A(10); 

现在,让我们序列化和反序列化$测试:

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来说很重要,但对另一个应用程序可能没有多大意义);但也有其局限性。

相关问题