serialize和json_encode效率比较

将数组转为字符串,serializejson_encode效率高很多。

PHP 7.1.5下测试:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
// 数据较多的情况下
$target = array(
    'battle_id' => 257,
    'user_id' => 41248,
    'user_id2' => 23989,
    'player' => 41248,
    'formation' => array('41248' => 1, '23989' => 2),
    'result' => 1,
    'battle_type' => 1,
    'speed' => array('41248' => 0, '23989' => 0),
    'attacker' => array(
        '1' => array(
            'user_id' => 41248,
            'soldier_id' => 28, 'prototype_id' => 4, 'bid' => 1, 'level' => 1, 'rare' => 1, 'skill_id' => 1, 'totalhp' => 3997, 'hp' => 3997, 'attack_general' => 346, 'attack_skill' => 596, 'attack_explode' => 458, 'attack_type' => 1, 'defense' => 0, 'anger' => 50, 'dodge' => 2, 'crit' => 2, 'block' => 2, 'block_effect' => 0.5, 'crit_effect' => 2, 'foramtion_effect' => 0
        ), '4' => array(
            'user_id' => 41248, 'soldier_id' => 29, 'prototype_id' => 2, 'bid' => 1, 'level' => 1, 'rare' => 1, 'skill_id' => 1, 'totalhp' => 3555, 'hp' => 3555, 'attack_general' => 396, 'attack_skill' => 581, 'attack_explode' => 418, 'attack_type' => 1, 'defense' => 0, 'anger' => 50, 'dodge' => 2, 'crit' => 2, 'block' => 0, 'block_effect' => 0.5, 'crit_effect' => 2, 'foramtion_effect' => 0
        ), '5' => array(
            'user_id' => 41248, 'soldier_id' => 30, 'prototype_id' => 6, 'bid' => 1, 'level' => 1, 'rare' => 1, 'skill_id' => 1, 'totalhp' => 3043, 'hp' => 3043, 'attack_general' => 351, 'attack_skill' => 540, 'attack_explode' => 474, 'attack_type' => 1, 'defense' => 0, 'anger' => 50, 'dodge' => 2, 'crit' => 2, 'block' => 0, 'block_effect' => 0.5, 'crit_effect' => 2, 'foramtion_effect' => 0
        ), '7' => array(
            'user_id' => 41248, 'soldier_id' => 37, 'prototype_id' => 2, 'bid' => 1, 'level' => 1, 'rare' => 1, 'skill_id' => 1, 'totalhp' => 3491, 'hp' => 3491, 'attack_general' => 393, 'attack_skill' => 532, 'attack_explode' => 456, 'attack_type' => 1, 'defense' => 0, 'anger' => 50, 'dodge' => 2, 'crit' => 2, 'block' => 0, 'block_effect' => 0.5, 'crit_effect' => 2, 'foramtion_effect' => 0
        )
    ), 'defender' => array(
        '2' => array(
            'user_id' => 23989, 'soldier_id' => 24, 'prototype_id' => 1, 'bid' => 1, 'level' => 1, 'rare' => 1, 'skill_id' => 1, 'totalhp' => 3230, 'hp' => 3230, 'attack_general' => 390, 'attack_skill' => 567, 'attack_explode' => 442, 'attack_type' => 1, 'defense' => 0, 'anger' => 50, 'dodge' => 2, 'crit' => 2, 'block' => 0, 'block_effect' => 0.5, 'crit_effect' => 2, 'foramtion_effect' => 0
        ), '5' => array(
            'user_id' => 23989, 'soldier_id' => 25, 'prototype_id' => 2, 'bid' => 1, 'level' => 1, 'rare' => 1, 'skill_id' => 1, 'totalhp' => 3400, 'hp' => 3400, 'attack_general' => 379, 'attack_skill' => 536, 'attack_explode' => 405, 'attack_type' => 1, 'defense' => 0, 'anger' => 50, 'dodge' => 2, 'crit' => 2, 'block' => 0, 'block_effect' => 0.5, 'crit_effect' => 2, 'foramtion_effect' => 0
        ), '7' => array(
            'user_id' => 23989, 'soldier_id' => 26, 'prototype_id' => 6, 'bid' => 1, 'level' => 1, 'rare' => 1, 'skill_id' => 1, 'totalhp' => 3669, 'hp' => 3669, 'attack_general' => 362, 'attack_skill' => 549, 'attack_explode' => 426, 'attack_type' => 1, 'defense' => 0, 'anger' => 50, 'dodge' => 2, 'crit' => 2, 'block' => 0, 'block_effect' => 0.5, 'crit_effect' => 2, 'foramtion_effect' => 0
        ), '9' => array(
            'user_id' => 23989, 'soldier_id' => 27, 'prototype_id' => 1, 'bid' => 1, 'level' => 1, 'rare' => 1, 'skill_id' => 1, 'totalhp' => 3618, 'hp' => 3618, 'attack_general' => 326, 'attack_skill' => 510, 'attack_explode' => 419, 'attack_type' => 1, 'defense' => 0, 'anger' => 50, 'dodge' => 2, 'crit' => 2, 'block' => 0, 'block_effect' => 0.5, 'crit_effect' => 2, 'foramtion_effect' => 0
        )
    ), 'battle_process' => array(
        '0' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '1' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '2' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '3' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '4' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '5' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '6' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '7' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '8' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '9' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '10' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '11' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '12' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '13' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '14' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '15' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '16' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '17' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '18' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '19' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        ), '20' => array(
            'user_id' => 41248, 'asid' => 28, 'bsid' => array('0' => 26), 'harm' => array('0' => 1650), 'dhp' => array('0' => 2019), 'attacker_anger' => 66, 'defender_anger' => array('0' => 94), 'skill' => 0, 'state' => 0
        )
    )
);
$json = json_encode($target);
$seri = serialize($target);

echo "json :", strlen($json), PHP_EOL;
echo "serialize :", strlen($seri), PHP_EOL;

$stime = microtime(true);
for ($i = 0; $i < 10000; $i++) {
    json_encode($target);
}
$etime = microtime(true);

echo "json_encode :", ($etime - $stime), PHP_EOL;
// --------------------------------------------

$stime = microtime(true);
for ($i = 0; $i < 10000; $i++) {
    json_decode($json, true);
}
$etime = microtime(true);

echo "json_decode :", ($etime - $stime), PHP_EOL;

//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i++) {
    serialize($target);
}
$etime = microtime(true);

echo "serialize :", ($etime - $stime), PHP_EOL;

//----------------------------------
$stime = microtime(true);
for ($i = 0; $i < 10000; $i++) {
    unserialize($seri);
}
$etime = microtime(true);

echo "unserialize :", ($etime - $stime), PHP_EOL;

测试结果:

1
2
3
4
5
6
json :5350
serialize :8590
json_encode :0.33600091934204
json_decode :1.3156130313873
serialize :0.26520109176636
unserialize :0.49200201034546

继续测试小数据

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
// 少量数据的情况
$target = array(
    'battle_id' => 257, 'user_id' => 41248, 'user_id2' => 23989, 'player' => 41248, 'formation' => array(
        '41248' => 1, '23989' => 2
    ), 'result' => 1, 'battle_type' => 1, 'speed' => array(
        '41248' => 0, '23989' => 0
    )
);

$json = json_encode($target);
$seri = serialize($target);

echo "json :", strlen($json), PHP_EOL;
echo "serialize :", strlen($seri), PHP_EOL;

$stime = microtime(true);
for ($i = 0; $i < 10000; $i++) {
    json_encode($target);
}
$etime = microtime(true);

echo "json_encode :", ($etime - $stime), PHP_EOL;

//----------------------------------    

$stime = microtime(true);
for ($i = 0; $i < 10000; $i++) {
    json_decode($json, true);
}
$etime = microtime(true);

echo "json_decode :", ($etime - $stime), PHP_EOL;

//----------------------------------    
$stime = microtime(true);
for ($i = 0; $i < 10000; $i++) {
    serialize($target);
}
$etime = microtime(true);

echo "serialize :", ($etime - $stime), PHP_EOL;

//----------------------------------    
$stime = microtime(true);
for ($i = 0; $i < 10000; $i++) {
    unserialize($seri);
}
$etime = microtime(true);

echo "unserialize :", ($etime - $stime), PHP_EOL;

测试结果:

1
2
3
4
5
6
json :156
serialize :222
json_encode :0
json_decode :0.046799898147583
serialize :0
unserialize :0.015599966049194