正好遇到这个项目帮你测试了一下,测试过程如下:
三种形式事先存放各自序列化好的相同的数据10万个文本准备读取:
explode 大小:661Mb 占用空间:779Mb
serialize 大小:787Mb 占用空间:1.01Gb
json 大小:882Mb 占用空间:1.09Gb
第一轮测试:
explode: 82.351449966431 秒
serialize:65.974032878876 秒
json :82.163902997971 秒
第二轮测试:
explode: 101.51485490799 秒 内存使用:11200Kb
serialize:55.088683843613 秒 内存使用:11188Kb
json :52.850549936295 秒
第三轮测试:
explode: 36.264735937119 秒 内存使用:11200Kb
serialize:36.270735025406 秒 内存使用:11196Kb
json :75.997661828995 秒 内存使用:11252Kb
第四轮测试:
explode: 98.666929006577 秒 cpu:9% 内存使用:11196Kb
serialize:61.406966924667 秒 cpu:13% 内存使用:11192Kb
json :73.898298025131 秒 cpu:16% 内存使用:11248Kb
天天在用,还真的没想过这问题,写了个脚本粗浅测试
<?php
function prt($str) {
echo $str . '<br />';
}
function get_time() {
return time() + microtime();
}
$ex = '#PAGE#';
$times = 1000;
$body = array(
'content1' => '公司概况公司概况公司概况公司概况公司概况公司概况公司概况公司概况公司概况公司概况',
'content2' => '公司历史公司历史公司历史公司历史公司历史公司历史公司历史公司历史公司历史公司历史',
'content3' => '公司行情公司行情公司行情公司行情公司行情公司行情公司行情公司行情公司行情公司行情',
);
$data = array(
array('name' => 'explode', 'encode' => function($arr){ return implode($ex, $arr); }, 'decode' => function($str){ return explode($ex, $str); }),
array('name' => 'json', 'encode' => function($arr){ return json_encode($arr); }, 'decode' => function($str){ return json_decode($str, true); }),
array('name' => 'serialize', 'encode' => function($arr){ return serialize($arr); }, 'decode' => function($str){ return unserialize($str); }),
);
prt('字符串长度:');
foreach ($data as &$row) {
$row['content'] = $row['encode']($body);
$row['length'] = strlen($row['content']);
prt($row['name'] . ':' . $row['length']);
}
unset($row);
prt('');
prt('编码' . $times .'次的时间:');
$start = get_time();
$a = array();
foreach ($data as &$row) {
for($i=0; $i<$times; $i++){
$a = $row['encode']($body);
}
$end = get_time();
prt($row['name'] . ':' . ($end - $start));
$start = $end;
}
prt('');
prt('解码' . $times .'次的时间:');
$start = get_time();
$a = '';
foreach ($data as &$row) {
for($i=0; $i<$times; $i++){
$a = $row['decode']($row['content']);
}
$end = get_time();
prt($row['name'] . ':' . ($end - $start));
$start = $end;
}
字符串长度:
explode:360
json:763
serialize:438
编码1000次的时间:
explode:1.0800619125366
json:0.017001152038574
serialize:0.015001058578491
解码1000次的时间:
explode:2.461140871048
json:0.025001049041748
serialize:0.01400089263916
serialize胜出