我需要将多维关联数据数组存储在平面文件中以进行缓存。我可能偶尔会遇到需要将其转换为 JSON 以在我的 Web 应用程序中使用,但绝大多数时间我将直接在 PHP 中使用该数组。
在这个文本文件中将数组存储为 JSON 或 PHP 序列化数组会更有效吗?我环顾四周,似乎在最新版本的 PHP(5.3)中,json_decode实际上比unserialize.
json_decode
unserialize
我目前倾向于将数组存储为 JSON,因为我觉得如果必要的话它更容易被人类阅读,它可以在 PHP 和 JavaScript 中使用,而且几乎不需要付出任何努力,根据我的阅读,它甚至可能是解码速度更快(但不确定编码)。
有谁知道任何陷阱?任何人都有很好的基准来展示这两种方法的性能优势吗?
取决于你的优先级。
如果性能是您的绝对驾驶特性,那么一定要使用最快的。在做出选择之前,请确保您对差异有充分的了解
serialize()
json_encode($array, JSON_UNESCAPED_UNICODE)
__sleep()
__wakeup()
PHP>=5.4
可能还有其他一些我目前无法想到的差异。
一个简单的速度测试来比较两者
<?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 seconds\n"; // Time serialization $start = microtime(true); serialize($testArray); $serializeTime = microtime(true) - $start; echo "PHP serialized in $serializeTime seconds\n"; // 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'; }