php array存数据库用json_encode还是serialize

论证一:http://bbs.csdn.net/topics/390984122?page=1

论证二:http://blog.csdn.net/fdipzone/article/details/43679337

总结: serialize比json快一点,但是代码量也大,而json简单,若你json数据大的话,建议用serialize,小数据存储读取用json即可。看个人所好。

回复于: 2015-02-08 10:04:55

正好遇到这个项目帮你测试了一下,测试过程如下:
三种形式事先存放各自序列化好的相同的数据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胜出

 

转载于:https://my.oschina.net/u/912364/blog/703051

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值