我需要在平面文件中存储多维关联数据数组,以用于缓存。我可能偶尔会遇到需要将其转换为JSON,以便在我的web应用程序中使用,但绝大多数情况下,我将直接在PHP中使用该数组
在这个文本文件中,将数组存储为JSON或PHP序列化数组会更有效吗?我环顾四周,发现在最新版本的PHP(5.3)中,json_decode实际上比unserialize更快
我目前倾向于将数组存储为JSON,因为我觉得如果有必要的话,它更容易被人读取,它可以在PHP和JavaScript中使用,而且几乎不费什么力气,而且从我所读到的内容来看,它甚至可以更快地解码(尽管不确定编码)
有人知道有什么陷阱吗?有谁有好的基准来展示这两种方法的性能优势
这取决于你的优先级
如果性能是你的绝对驾驶特征,那么一定要使用最快的。在你做出选择之前,确保你完全理解了这些差异
- 与
serialize()不同,您需要添加额外的参数以保持UTF-8字符不变:json\u encode($array,json\u UNESCAPED\u UNICODE)(否则它会将UTF-8字符转换为UNICODE转义序列) - JSON将没有对象原始类的内存(它们总是作为stdClass的实例恢复)
- 您不能使用JSON来利用
\u sleep()和\u wakeup() - 默认情况下,只有公共属性被JSON序列化。(在
PHP>;=5.4中,可以实现JsonSerializable来更改此行为) - JSON更具可移植性
可能还有其他一些区别我现在想不起来
一个简单的速度测试来比较两者
<;?php
ini设置(“显示错误”,1);
错误报告(E_全部);
//制作一个大的honkin测试阵列
//您可能需要调整此深度以避免内存限制错误
$testArray=fillArray(0,5);
//时间json编码
$start=microtime(真);
json_编码($testArray);
$jsonTime=微时间(true)-$start;
echo“JSON编码为$jsonTime秒\n”;
//时间序列化
$start=microtime(真);
序列化($testArray);
$serializeTime=微时间(true)-$start;
echo“PHP在$SerializedTime秒内序列化\n”;
//比较它们
if($jsonTime<;$serializeTime){
printf(“json_encode()比serialize()\n快大约%01.2f%%,($serializeTime/$jsonTime-1)*100);
}
else if($serializeTime<;jsonTime){
printf(“serialize()比json_encode()\n快大约%01.2f%,($jsonTime/$serializeTime-1)*100);
}否则{
回声“不可能!\n”;
}
函数fillArray($depth,$max){
静态种子;
如果(为空($seed)){
$seed=数组('a',2',c',4',e',6',g',8',i',10);
}
如果($depth<;$max){
$node=array();
foreach($seed作为$key){
$node[$key]=fillArray($depth+1,$max);
}
返回$node;
}
返回“空”;
}