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序列化