LEN

PHP json_encode/json_decode与serialize/unserializ性能测试
PHP json_encode/json_decode与serialize/unserializ性能测试在数据库中...
扫描右侧二维码阅读全文
05
2017/08

PHP json_encode/json_decode与serialize/unserializ性能测试

PHP json_encode/json_decode与serialize/unserializ性能测试
在数据库中要直接存储键值对,PHP中提供的json_encode与serialize都可以满足需求。在具体的性能对比上,网上查看比人的说法,包括国外网站上说的,基本上都是在编码和空间上json_encode效率会高很多,在解码上unserlize会比较快。

经过实际环境下测试,测试结果与以上说法并不全部一致。

测试版本PHP7.1.7。

测试结果:

1、在存储空间上json编码确实是很有优势的;

2、当编码的对象比较简单时,如只有一两个数组项组成的额一位数组,执行速度上json_encode比serialize要快;

3、当编码对象项比较多或组成比较复杂时,执行速度上serialize比json_encode要快;

4、在解码速度上,unserializ比json_decode要快。

写脚本测试了一下:

$i = 0;
$data = array_fill(0,100, 1);
while($i < 1000000) {
    json_encode($data);
    //json_decode($data, true);
    $i++;
}

$i = 0;
$data = array_fill(0,100, 1);
while($i < 1000000) {

    serialize($data);
    //unserialize($data);
    $i++;
}

分别根据序列化及反序列化测试:
简单数组序列化 json_encode 胜出

#time php7 index.php index serialize
real    0m3.676s
user    0m3.559s
sys    0m0.034s
#time php7 index.php index json_encode
real    0m2.078s
user    0m1.959s
sys    0m0.036s

简单数组反序列化 json_encode 胜出

#time php7 index.php index json_decode
real    0m10.986s
user    0m10.446s
sys    0m0.038s
#time php7 index.php index unserialize
real    0m7.111s
user    0m6.893s
sys    0m0.037s

复杂数组 序列化 serialize 胜出

time php7 index.php index serialize
real    0m43.277s
user    0m41.875s
sys    0m0.059s
time php7 index.php index json_encode
real    1m0.988s
user    0m59.110s
sys    0m0.067s

复杂数组 反序列化 unserialize 胜出 (but 并不怎么明显)

$i = 0;
//$data = array_fill(0,100, 1);
$data = '{"c_id"...322"}';
while($i < 1000000) {
  //json_encode($data);
  json_decode($data, true);
  $i++;
}

$i = 0;
//$data = array_fill(0,100, 1);
$data = 'a:4:{s:4:"......2";}';
while($i < 1000000) {
  //serialize($data);
  unserialize($data);
  $i++;
}

测试结果:

time php7 index.php index unserialize
real    1m47.532s
user    1m40.669s
sys    0m0.140s

time php7 index.php index json_decode
real    3m50.987s
user    3m43.805s
sys    0m0.271s
最后修改:2017 年 08 月 08 日 11 : 37 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论