存储PHP数组的首选方法(json
为了缓存目的,我需要在平面文件中存储多维关联数据数组。 我可能偶尔会遇到需要将其转换为JSON以用于我的Web应用程序,但绝大多数时间我将直接在PHP中使用该数组。
将数组作为JSON或PHP序列化数组存储在此文本文件中效率更高吗? 我环顾四周,似乎在最新版本的PHP(5.3)中, json_decode
实际上比反unserialize
更快。
我目前倾向于将数组存储为JSON,因为如果有必要,我觉得它更容易被人读取,它可以用很少的努力在PHP和JavaScript中使用,从我读过的内容来看,它甚至可能是更快的解码(虽然不确定编码)。
有谁知道任何陷阱? 任何人都有良好的基准来展示任一方法的性能优势?
取决于你的优先事项。
如果性能是你绝对的驾驶特性,那么通过一切手段使用最快的一个。 在做出选择之前,请确保您充分了解差异
serialize()
不同,您需要添加额外的参数以保持UTF-8字符不变: json_encode($array, JSON_UNESCAPED_UNICODE)
(否则它会将UTF-8字符转换为Unicode转义序列)。 __sleep()
和__wakeup()
PHP>=5.4
您可以实现JsonSerializable来更改此行为)。 可能还有其他一些我现在无法想到的差异。
一个简单的速度测试来比较两者
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
// Make a big, honkin test array
// You may need to adjust this depth to avoid memory limit errors
$testArray = fillArray(0, 5);
// Time json encoding
$start = microtime(true);
json_encode($testArray);
$jsonTime = microtime(true) - $start;
echo "JSON encoded in $jsonTime secondsn";
// Time serialization
$start = microtime(true);
serialize($testArray);
$serializeTime = microtime(true) - $start;
echo "PHP serialized in $serializeTime secondsn";
// Compare them
if ($jsonTime < $serializeTime) {
printf("json_encode() was roughly %01.2f%% faster than serialize()n", ($serializeTime / $jsonTime - 1) * 100);
}
else if ($serializeTime < $jsonTime ) {
printf("serialize() was roughly %01.2f%% faster than json_encode()n", ($jsonTime / $serializeTime - 1) * 100);
} else {
echo "Impossible!n";
}
function fillArray( $depth, $max ) {
static $seed;
if (is_null($seed)) {
$seed = array('a', 2, 'c', 4, 'e', 6, 'g', 8, 'i', 10);
}
if ($depth < $max) {
$node = array();
foreach ($seed as $key) {
$node[$key] = fillArray($depth + 1, $max);
}
return $node;
}
return 'empty';
}
JSON比PHP的序列化格式简单快捷,应该使用JSON, 除非 :
json_decode()
:“如果JSON编码数据比127个元素更深,则此函数将返回false。” 我写了一篇关于这个主题的博文:“缓存大数组:JSON,序列化或var_export?”。 在这篇文章中,它显示了serialize是小型到大型阵列的最佳选择。 对于非常大的数组(> 70MB),JSON是更好的选择。
链接地址: http://www.djcxy.com/p/9895.html