php中serialize和json_encode的性能对比

serialize和json_encode都是php里面对数据进行序列化的方法,这两个方式到底哪个性能更优呢?什么时候用serialize和json_encode比较合适呢?

最近发现某个项目用了不少的serialize去序列化数据,习惯json_encode的我感觉这里需要更深入了解两者的优势特点。

经过认真学习和操作,现在说是他们的主要区别:

1.serialize后的对象可以被反序列后继续调用其成员方法,即可以$obj->method();而json_encode后的json_decode后是报错。

2.serialize后的数据长度大比json_encode的长,所以相对来说消耗了存储空间


echo strlen(json_encode($_SERVER,JSON_UNESCAPED_UNICODE));
echo '------';
echo strlen(serialize($_SERVER));//4385------4891

3.大量数据时serialize执行速度比json_code快很多,简单一个100000的for循环对比,前者耗时0.36秒,后者耗时1.38秒


$time = microtime(true);

for ($i=0;$i<100000;$i++){
    $t = json_encode($_SERVER,JSON_UNESCAPED_UNICODE);

}

echo microtime(true)-$time,'<Br>';//1.3815569877625

$time =microtime(true);

for ($i=0;$i<100000;$i++){    $t = serialize($_SERVER);
}

echo microtime(true)-$time,'<Br>';//0.36323404312134

4.在数据传输方面用json_encode最好,目前主流还是json活着xml。而serialize少之又少


总结一下:

1.如果需要储存到数据库用json_encode更合适,节省数据库空间

2.作为接口返回用json_encode更加友好

3.处理大量数据又非储存数据库时选用serialize性能更加,如存放在redis中的商品详情、系统配置等

4.为了节省实例化开销的实例化对象可以用serialize,直接反序列化即可自然调用成员

5.有些特殊字符的防止json_encode破坏的数据建议用serialize序列化


评论/留言