实例分析和PHPJSON序列化序列化的性能测试

最近,你需要存储大数组,你需要在序列化序列化和JSON的选择。因此需要一个性能测试。

数组是存放时php5.2之前,大多数的序列化序列化使用。后php5.2,JSON的支持开始了。

有一些信息在互联网上,json_encode和json_decode比内置的序列化,序列化功能更有效。听不见的好,看到的未必是真实的,那么它的实际数据测试…

我们首先理解这个概念:



首先,序列化



序列化的过程是对象状态转换为可传送的格式。序列化反对序列化,将流为对象,结合这两个过程,数据可以存储和传输容易。
将一个对象的状态信息转换为可以存储或传输的形式的过程。在序列化对象将其当前状态写入到临时或持久性存储区。后来,对象可以重新创建,通过阅读或反序列化对象的状态从存储区。
在一般情况下,对象实例的所有字段都会被序列化,这意味着将数据表示为序列化数据的实例,代码可以解释格式可能能够确定数据的值,而不依赖于该成员的可访问性。同样的,反序列化提取数据的序列化表示直接设置对象的状态,这是独立的访问规则,可能包含重要的安全数据的任何对象,它不应该被序列化,如果可能的话,如果它必须是可序列化的,要产生一个特定的字段保存不可序列化的重要数据。如果这不能可以实现,应该指出的是,数据将暴露To具有序列化权限的任何代码,并且不允许任何恶意代码获得该权限。




二,JSON




JSON,Javascript对象表示法,一种更轻,更友好的数据交换格式(Ajax,休息等),JSON是结构化数据序列化的文本格式。作为一种替代XML,它是用来表示客户端和服务器之间的数据交换的有效载荷格式。它是来自于ECMAscript标准。JSON的设计目标是使它小,携带方便,文本,和javascript.json子集使用文本格式是完全独立的语言,但它也使用习惯类似于C的家庭(包括C,C++,C #,java,Javascript,Perl,Python,等),这些特点使JSON成为理想的数据交换语言。很方便的读写,也可以很容易地解析和生成机。
JSON的构造有两种结构:
1集。名称/值对(集合的名称/值对)。在不同的语言中,它被理解为对象(object),记录(记录)、结构(struct),字典(字典),哈希表(hash表),keylist(列表),或者关联数组(数组)。

2的有序列表。值(一个有序的值列表)。在大多数语言中,它被理解为数组(数组):




三。实际测试



在PHP 5.3下执行:我们首先使用小数据进行测试:
复制代码代码如下所示:
< PHP
$目标=数组(
battle_id= > 257
user_id= > 41248
user_id2= > 23989
玩家= 41248
编队=阵列

41248=1
23989=2


结果= 1
battle_type= > 1
速度=数组

41248=0
23989=0

);

JSON = json_encode美元(美元的目标);
美元($目标)=连载系列;


回声连载:

$时间=瞬时(真);
($ i = 0;$ i < 10000;$ + +){
json_encode(为目标);
}
$时间=瞬时(真);

回声json_encode:

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

$时间=瞬时(真);
($ i = 0;$ i < 10000;$ + +){
json_decode($ JSON,真的);
}
$时间=瞬时(真);

回声json_decode:

/ / ----------------------------------
$时间=瞬时(真);
($ i = 0;$ i < 10000;$ + +){
序列化(为目标);
}
$时间=瞬时(真);

回声连载:

/ / ----------------------------------
$时间=瞬时(真);
($ i = 0;$ i < 10000;$ + +){
序列化($斯里巴加湾);
}
$时间=瞬时(真);

回声序列化:

>

测试结果:
JSON:156
连载:222
json_encode:0.1087498664856
json_decode:0.12652111053467
连载:0.041656017303467
序列化:0.040987968444824


试验结果表明,JSON是效率稍低比序列化,并可能在php5.2.it差应在PHP5.3,JSON扩展进行了优化。
然后使用一个大数组进行测试(代码放在结尾,因为代码数组较长)。
测试结果:
JSON:5350
连载:8590
json_encode:0.90479207038879
json_decode:1.753741979599
连载:1.3566699028015
序列化:1.3003630638123

我们可以看到,序列化是小于一个数量级的速度比JSON。
总结:
1)空间比较
序列化是大约1.5倍的JSON编码后。

原因uff1a

在序列化,字符串包含子串的长度,这可能是一个速度的优化,但结果是不能令人满意的。
序列化类型更详细的区分,和JSON的只有四种类型,并表示为一个简单的符号。
2)速度比较
在较小的数据的情况下,它比JSON更快。

在数据量大的情况下,JSON是一点点比序列化
3)处理对象
JSON无法处理诸如对象方法之类的数据。
4)使用范围

序列化使用序列化,特别是对象的存储。这是它存在的意义。
与对象无关的数据存储可以使用JSON,如大量数字数组。


JSON是常用的前后互动,目前只支持UTF-8编码,JSON数据。
复制代码代码如下所示:
< PHP

$目标=数组(
battle_id= > 257
user_id= > 41248
user_id2= > 23989
玩家= 41248
形成= >阵列('41248= > 1,'23989= > 2)
结果= 1
battle_type= > 1
速度= >阵列('41248= > 0,'23989= > 0)
攻击者=数组(
1(数组)
user_id= > 41248
soldier_id= > 28
prototype_id= > 4
出价= 1
水平= 1
稀有=1
skill_id= > 1
totalhp= > 3997
hp= 3997
attack_general= > 346
attack_skill= > 596
attack_explode= > 458
attack_type= > 1
防御=0
愤怒=50
道奇= 2
暴击= 2
块=2
block_effect= > 0.5
crit_effect= > 2
foramtion_effect= > 0)
4=数组(
user_id= > 41248
soldier_id= > 29
prototype_id= > 2
出价= 1
水平= 1
稀有=1
skill_id= > 1
totalhp= > 3555
hp= 3555
attack_general= > 396
attack_skill= > 581
attack_explode= > 418
attack_type= > 1
防御=0
愤怒=50
道奇= 2
暴击= > 2
块=0
block_effect= > 0.5
crit_effect= > 2
foramtion_effect= > 0

5=数组(
user_id= > 41248
soldier_id= > 30
prototype_id= > 6
出价= 1
水平= 1
稀有=1
skill_id= > 1
totalhp= > 3043
惠普= > 3043
attack_general= > 351
attack_skill= > 540
attack_explode= > 474
attack_type= > 1
防御=0
愤怒=50
道奇= 2
暴击= 2
块=0
block_effect= > 0.5
crit_effect= > 2
foramtion_effect= > 0)
7=数组(
user_id= > 41248
soldier_id= > 37
prototype_id= > 2
出价= 1
水平= 1
稀有=1
skill_id= > 1
totalhp= > 3491
hp= 3491
attack_general= > 393
attack_skill= > 532
attack_explode= > 456
attack_type= > 1
防御=0
愤怒=50
道奇= 2
暴击= 2
块=0
block_effect= > 0.5
crit_effect= > 2
foramtion_effect= > 0))
防御=数组(
2=数组(
user_id= > 23989
soldier_id= > 24
prototype_id= > 1
出价= 1
水平= 1
稀有=1
skill_id= > 1
totalhp= > 3230
hp= 3230
attack_general= > 390
attack_skill= > 567
attack_explode= > 442
attack_type= > 1
防御=0
愤怒=50
道奇= 2
暴击= > 2
块=0
block_effect= > 0.5
crit_effect= > 2
foramtion_effect= > 0)
5=数组(
user_id= > 23989
soldier_id= > 25
prototype_id= > 2
出价= 1
水平= 1
稀有=1
skill_id= > 1
totalhp= > 3400
hp= 3400
attack_general= > 379
attack_skill= > 536
attack_explode= > 405
attack_type= > 1
防御=0
愤怒=50
道奇= 2
暴击= > 2
块=0
block_effect= > 0.5
crit_effect= > 2
foramtion_effect= > 0)
7=数组(
user_id= > 23989
soldier_id= > 26
prototype_id= > 6
出价= 1
水平= 1
稀有=1
skill_id= > 1
totalhp= > 3669
hp= 3669
attack_general= > 362
attack_skill= > 549
attack_explode= > 426
attack_type= > 1
防御=0
愤怒=50
道奇= 2
暴击= 2
块=0
block_effect= > 0.5
crit_effect= > 2
foramtion_effect= > 0)
9=数组(
user_id= > 23989
soldier_id= > 27
prototype_id= > 1
出价= 1
水平= 1
稀有=1
skill_id= > 1
totalhp= > 3618
hp= 3618
attack_general= > 326
attack_skill= > 510
attack_explode= > 419
attack_type= > 1
防御=0
愤怒=50
道奇= 2
暴击= > 2
块=0
block_effect= > 0.5
crit_effect= > 2
foramtion_effect= > 0))
battle_process= >阵列(
0=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0


1=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0


2=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0

3=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0


4=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0

5=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0


6=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0


7=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0

8=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0


9=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0

10=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0

11=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0


12=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0

13=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0

14=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0


15=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0

16=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0

17=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0


18=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0

19=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0


20=数组(
user_id= > 41248
说= > 28
行= >阵列(0= > 26)
伤害= >阵列(0= > 1650)
DHP的= >阵列(0= > 2019)
attacker_anger= > 66
defender_anger= >阵列(0= > 94)
技能=0
状态=0



);


JSON = json_encode美元(美元的目标);
美元($目标)=连载系列;


回声连载:

$时间=瞬时(真);
($ i = 0;$ i < 10000;$ + +){
json_encode(为目标);
}
$时间=瞬时(真);

回声json_encode:

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

$时间=瞬时(真);
($ i = 0;$ i < 10000;$ + +){
json_decode($ JSON,真的);
}
$时间=瞬时(真);

回声json_decode:

/ / ----------------------------------
$时间=瞬时(真);
($ i = 0;$ i < 10000;$ + +){
序列化(为目标);
}
$时间=瞬时(真);

回声连载:

/ / ----------------------------------
$时间=瞬时(真);
($ i = 0;$ i < 10000;$ + +){
序列化($斯里巴加湾);
}
$时间=瞬时(真);

回声序列化:

>