php array存數據庫用json_encode仍是serialize

論證一:http://bbs.csdn.net/topics/390984122?page=1php

論證二:http://blog.csdn.net/fdipzone/article/details/43679337json

總結: 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
spa

 

每天在用,還真的沒想過這問題,寫了個腳本粗淺測試.net

<?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勝出code

相關文章
相關標籤/搜索