平常工做中须要在数据库中存储一些结构数据,经常使用的方法有两种,一是序列化(serialize),二是json格式。php
二者各有优缺点,好比序列化支持对象格式、序列化后的数据会保存数据类型和数据个数。而json格式相比序列化的数据更短,而且先后端交互时适用性也更好。前端
但在实际的项目中,应该用哪一种格式来存储数据呢?网上说法不一,老手们更倾向于序列化(多是由于json格式是在PHP5.2以后才引进的),而年轻小伙们更倾向于json(可能他们没据说过序列化),今天抛开其余的不谈,只从性能上看看,哪一种格式性能更好。数据库
测试日期:2016年07月23日json
测试机:MacBook Pro(13 英寸,2015 年初期)后端
CPU:2.7 GHz Intel Core i5api
内存:8 GB 1867 MHz DDR3性能
PHP版本:PHP 5.6.15测试
测试步骤:
1.小数据的序列化和json压缩
2.小数据的序列化和json解压缩
3.大数据的序列化和json压缩
4.大数据的序列化和json解压缩
测试方法:
每次测试循环10次,每一个操做循环10000次大数据
测试结论在最下面,测试代码在最最下面,对数据没兴趣的小伙伴能够直接拉到最下面code
测试数据
[1,2,3,4,5,6,7,8,9,0]
序列化
0.013802766799927 0.012701034545898 0.015209913253784 0.012706995010376 0.012805938720703 0.013393878936768 0.013147830963135 0.012894153594971 0.013478994369507 0.012289047241211
json
0.0054340362548828 0.0052530765533447 0.0050327777862549 0.0051569938659668 0.0053970813751221 0.0050327777862549 0.0049920082092285 0.0052528381347656 0.0051090717315674 0.0069460868835449
测试数据
序列化:a:10:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:8;i:8;i:9;i:9;i:0;} JSON:[1,2,3,4,5,6,7,8,9,0]
序列化
0.012141942977905 0.012423992156982 0.011405944824219 0.011841058731079 0.011488914489746 0.013920068740845 0.011885166168213 0.01164984703064 0.011460065841675 0.012734889984131
json
0.014571905136108 0.014070987701416 0.015500068664551 0.013802051544189 0.015894174575806 0.014295101165771 0.013956069946289 0.013836145401001 0.014487028121948 0.012983083724976
测试数据
怕影响排版,只放上网址,能够复制后查看 http://api.mooninbox.com/api4/?api=goods/all
序列化
0.9694550037384 0.98343706130981 0.97917294502258 1.0035130977631 0.9904420375824 1.0137100219727 0.9673900604248 1.0110490322113 0.96677398681641 0.98873591423035
json
1.7659771442413 1.8020439147949 1.7754938602448 1.7524900436401 1.7396509647369 1.716423034668 1.708487033844 1.7435081005096 1.7137379646301 1.724583864212
测试数据
怕影响排版,只放上网址,能够复制后查看 http://api.mooninbox.com/api4/?api=goods/all
序列化
1.0362830162048 1.0082030296326 1.0194120407104 1.0099349021912 1.0123431682587 1.0072951316833 1.0213930606842 1.0140759944916 1.0116169452667 1.0359060764313
json
4.1445369720459 4.1114408969879 4.0740749835968 4.1012029647827 4.1110889911652 4.0948538780212 4.1167409420013 4.0959279537201 3.9271330833435 3.935909986496
在小数据压缩方面,json比序列化快了近1倍,而其余方面序列化比json都要快一些,特别是大数据解压缩这一块整整快了4倍。
有了这些数据支持,你会怎么选呢?
反正我是会用json,拿到json以后直接丢给前端或者移动端,让他们本身去处理吧,理由就是“服务端的性能很宝贵,哈哈哈”
<?php function ser($data) { $i = 0; $ret = ''; while($i < 10000) { $ret = serialize($data); $i ++; } return $ret; } function unser($data) { $i = 0; $ret = ''; while($i < 10000) { $ret = unserialize($data); $i ++; } return $ret; } function json($data) { $i = 0; $ret = ''; while($i < 10000) { $ret = json_encode($data); $i ++; } return $ret; } function unjson($data) { $i = 0; $ret = ''; while($i < 10000) { $ret = json_decode($data,true); $i ++; } return $ret; } $short = [1,2,3,4,5,6,7,8,9,0]; set_time_limit(0); $i = 0; while($i<10) { $start = microtime(true); $ret = ser($arr); $end = microtime(true); echo $end - $start; echo '</br>'; $i++; }