实例分析和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;$ + +){
序列化($斯里巴加湾);
}
$时间=瞬时(真);
回声序列化:
>