这就是我需要问的全部内容。检查了PHP手册并看到一条用户帖子说序列化比json_encode慢45-90%(他运行了一些基准测试)。但是“慢”的速度有多慢?我可以找到很多“对比”的东西,但是没有像我这样的初学者能够与之相关。
我刚写了一个脚本,用json编码一个数组,另一个用来解码它。我对序列化做了同样的事情。很明显,这不会告诉我他们之间有任何重大差异。
答案 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中进行可视化。