加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php中json和serialize 性能对比测试

发布时间:2023-09-12 13:10:42 所属栏目:PHP教程 来源:
导读:php中json是实时交换数据的一个常用的数据传输模式了,而serialize是把字符转换成一个序列化字符串了,那么它们两的性能那个会更好一些呢?对此小编整理了一些json和serialize 性能比较测试例子供各位学习参考.

测试
php中json是实时交换数据的一个常用的数据传输模式了,而serialize是把字符转换成一个序列化字符串了,那么它们两的性能那个会更好一些呢?对此小编整理了一些json和serialize 性能比较测试例子供各位学习参考.

测试1

1,操作元素较少,单个元素比较大,英文,3个元素操作1000次,代码如下:

$data = array('hello','word'); 
$d = "helloword"; 
$d = str_repeat($d, 10000); 
//for($i = 0;$i $data[] = $d; 
//} 
//var_dump($data); 
$jsonen_sarttime = getmicrotime(); 
for($i=0;$i $json = json_encode($data); 

echo "json长度:".strlen($json)." 
n"; 
$jsonen_endtime = getmicrotime(); 
echo "jsonencode耗时:".($jsonen_endtime - $jsonen_sarttime)." 
n"; 
$jsonde_starttime = getmicrotime(); 
for($i=0;$i $unjson = json_decode($json,true); 

$jsonde_endtime = getmicrotime(); 
echo "jsondecode耗时:".($jsonde_endtime - $jsonde_starttime)." 
n"; 
$seri1_starttime = getmicrotime(); 
for($i=0;$i $serialize = serialize($data); 

echo "serialize长度:".strlen($serialize)." 
n"; 
$seri1_endtime = getmicrotime(); 
echo "serialize序列化耗时:".($seri1_endtime - $seri1_starttime)." 
n"; 
$seri2_starttime = getmicrotime(); 
for($i=0;$i $unserialize = unserialize($serialize); 

$seri2_endtime = getmicrotime(); 
echo "serialize反序列化耗时:".($seri2_endtime - $seri2_starttime)." 
n"; 
/** 
*获取时间记 
* @return 
*/ 
function getmicrotime(){ 
list($usec, $sec) = explode(" ",microtime()); 
return ((float)$usec + (float)$sec); 

//output: 
json长度:90019 
jsonencode耗时:1.0974299907684 
jsondecode耗时:1.6237480640411 
serialize长度:90052 
serialize序列化耗时:0.025779962539673 
serialize反序列化耗时:0.029321193695068 
可以看到json在做英文处理的时候,数组元素较少,体积要小于序列化的数据.处理效率低于序列化,将data 更改为如下代码:

$data = array('hello','word'); 
$d = "你好"; 
$d = str_repeat($d, 10000); 
//for($i = 0;$i $data[] = $d; 
//output: 
json长度:120019 
jsonencode耗时:0.83260488510132 
jsondecode耗时:2.2054090499878 
serialize长度:60052 
serialize序列化耗时:0.01835298538208 
serialize反序列化耗时:0.01848292350769 
可以看到 json在做文字处理的时候,体积较大,处理效率也略低于序列化.

3.将数据更改为如下代码:

$data = array('hello','word'); 
$d = "你好"; 
for($i = 0;$i $data[] = $d; 

//output: 
json长度:150016 
jsonencode耗时:2.1428198814392 
jsondecode耗时:6.5845320224762 
serialize长度:198939 
serialize序列化耗时:2.8011980056763 
serialize反序列化耗时:4.6967668533325 
可以看到json体积略小于serialize.

4.将data修改为如下代码:

$data = array('hello','word'); 
$d = "hello"; 
for($i = 0;$i $data[] = $d; 

//output: 
json长度:80016 
jsonencode耗时:1.6437809467316 
jsondecode耗时:4.5136170387268 
serialize长度:188939 
serialize序列化耗时:2.909558057785 
serialize反序列化耗时:4.4678349494934 
测试2

以一个包含1000000个元素的数组做为原始数据,分别以json,serialize,igbinary进行序列化和反向操作,代码如下:

<?php 
ini_set('memory_limit', '512m'); 
$array = array_fill(0, 1000000, rand(1, 9999)); 
$start = microtime(true); 
$export = json_encode($array); 
$end = microtime(true); 
$duration = $end - $start; 
print('JSON Encode: ' . $duration . PHP_EOL); 
$start = microtime(true); 
$import = json_decode($export); 
$end = microtime(true); 
$duration = $end - $start; 
print('JSON Decode: ' . $duration . PHP_EOL); 
$start = microtime(true); 
$export = serialize($array); 
$end = microtime(true); 
$duration = $end - $start; 
print('Serialize: ' . $duration . PHP_EOL); 
$start = microtime(true); 
$import = unserialize($export); 
$end = microtime(true); 
$duration = $end - $start; 
print('Serialize: ' . $duration . PHP_EOL); 
$start = microtime(true); 
$export = igbinary_serialize($array); 
$end = microtime(true); 
$duration = $end - $start; 
print('Igbinary Serialize: ' . $duration . PHP_EOL); 
$start = microtime(true); 
$import = igbinary_unserialize($export); 
$end = microtime(true); //开源软件:Cuoxin.com 
$duration = $end - $start; 
print('Igbinary Serialize: ' . $duration . PHP_EOL); 
?> 
//测试结果 
JSON Encode: 0.084825992584229 
JSON Decode: 0.34976410865784 
Serialize: 0.38241410255432 
Serialize: 7.7904229164124 
Igbinary Serialize: 0.046916007995605 
Igbinary Serialize: 0.23396801948547 
从测试结果来看,速度方面优先级排列为 igbinary > json > serialize。同时我们也可以看到,php原生的serialize在对大对象进行反向操作时,速度真是掉队一大截了.

占用字节数对比

json:5000001

serialize:15888902

igbinary:7868681

在没有中文字符的情况下,json胜出,igbinary次之,serialize又被甩了几条街.

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章