php中json和serialize 性能比较测试

2015-01-27 09:33:47 576
摘要: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进行序列化和反向操作。
代码如下 复制代码
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);
$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又被甩了几条街
结论,
如果只是英文和数字,元素比较平均,则推荐json,体积和效率均优于序列化
如果只是英文和数字,个别元素较大,则推荐serialize效率优于序列化
如果中文,元素较少,推荐序列化,体积和效率均优于json
如果中文,元素比较平均,推荐json
如果是缓存业务,效率越高越好,如果是缓存数据,体积越小越好。也要看具体的场景。

你觉得这篇文章怎么样?

88 0
扫描二维码与小二CMS创始人沟通

7*24小时为您服务

小二CMS专注于高端网站定制、系统开发、商城开发、外贸网站建设、公众号开发、小程序开发、网站优化推广、安全运维等技术领域。是高端定制网站领域著名服务商!

本文标题:php中json和serialize 性能比较测试
免责声明:文章《php中json和serialize 性能比较测试》来至网络,文章表达观点不代表本站观点,文章版权属于原作者所有,若有侵权,请联系本站站长处理!
不忘初心,方得始终
中高端网站定制开发服务商
与我们取得联系

好作品自己会说话,

我们敬畏您给予的点滴信任 !

期待携手合作,请立即咨询我们:
QQ咨询
微信咨询
198-1095-0281
我们用心,期待您成为我们的客户
联系QQ客服

QQ扫码联系客服

联系微信客服

微信扫码联系客服

微信号: 198-1095-0281
添加微信好友, 详细咨询相关信息。

复制并跳转微信
19810950281