在数据库中要直接存储键值对,PHP中提供的json_encode
与serialize
都可以满足需求。在具体的性能对比上,网上查看比人的说法,包括国外网站上说的,基本上都是在编码和空间上json_encode
效率会高很多,在解码上unserlize
会比较快。
经过实际环境下测试,测试结果与以上说法并不全部一致。
测试版本PHP7.1.7
。
测试结果:
1、在存储空间上json编码确实是很有优势的;
2、当编码的对象比较简单时,如只有一两个数组项组成的额一位数组,执行速度上json_encode
比serialize
要快;
3、当编码对象项比较多或组成比较复杂时,执行速度上serialize
比json_encode
要快;
4、在解码速度上,unserializ
比json_decode
要快。
写脚本测试了一下:
$i = 0;
$data = array_fill(0,100, 1);
while($i < 1000000) {
json_encode($data);
//json_decode($data, true);
$i++;
}
$i = 0;
$data = array_fill(0,100, 1);
while($i < 1000000) {
serialize($data);
//unserialize($data);
$i++;
}
分别根据序列化及反序列化测试:
简单数组序列化 json_encode
胜出
#time php7 index.php index serialize
real 0m3.676s
user 0m3.559s
sys 0m0.034s
#time php7 index.php index json_encode
real 0m2.078s
user 0m1.959s
sys 0m0.036s
简单数组反序列化 json_encode
胜出
#time php7 index.php index json_decode
real 0m10.986s
user 0m10.446s
sys 0m0.038s
#time php7 index.php index unserialize
real 0m7.111s
user 0m6.893s
sys 0m0.037s
复杂数组 序列化 serialize
胜出
time php7 index.php index serialize
real 0m43.277s
user 0m41.875s
sys 0m0.059s
time php7 index.php index json_encode
real 1m0.988s
user 0m59.110s
sys 0m0.067s
复杂数组 反序列化 unserialize
胜出 (but
并不怎么明显)
$i = 0;
//$data = array_fill(0,100, 1);
$data = '{"c_id"...322"}';
while($i < 1000000) {
//json_encode($data);
json_decode($data, true);
$i++;
}
$i = 0;
//$data = array_fill(0,100, 1);
$data = 'a:4:{s:4:"......2";}';
while($i < 1000000) {
//serialize($data);
unserialize($data);
$i++;
}
测试结果:
time php7 index.php index unserialize
real 1m47.532s
user 1m40.669s
sys 0m0.140s
time php7 index.php index json_decode
real 3m50.987s
user 3m43.805s
sys 0m0.271s