我將有大約5 MB大小的文件,我有2種選擇:序列化的字符串或普通的PHP,這是更快的解析?
- 閱讀使用包括功能的文件純PHP陣列。
- 閱讀序列化/ json轉換陣列從文件使用file_get_contents函數然後解碼它。
哪一個會更快?我將使用它作爲緩存。
我將有大約5 MB大小的文件,我有2種選擇:序列化的字符串或普通的PHP,這是更快的解析?
哪一個會更快?我將使用它作爲緩存。
最初,當我看着這個問題時,我猜想PHP +操作碼緩存會比序列化的PHP更快,但是經過幾次基準測試後,我發現我錯了。 unserialize
執行的性能比require
好4倍。雖然通過var_export
編寫PHP似乎比serialize
更快。 PHP格式也具有人類可讀性的優點。
注:我跑的測試用PHP 5.3.3,並使用一個RAM磁盤作爲我的臨時文件夾。
如果你有內存空間(和APC安裝),我會建議使用apc_store
。我沒有對它進行基準測試,但我希望它比基於文件的緩存更快。
<?
function writestuff($folder, $data) {
$start = microtime(TRUE);
file_put_contents("$folder/array.data", serialize($data));
print (microtime(TRUE) - $start).",";
$start = microtime(TRUE);
file_put_contents("$folder/array.php", "<? return ".var_export($data, TRUE).";");
print (microtime(TRUE) - $start).",";
}
function readstuff($folder) {
$start = microtime(TRUE);
$data = unserialize(file_get_contents("$folder/array.data"));
print (microtime(TRUE) - $start).",";
unset($data);
apc_clear_cache();
if(! apc_compile_file("$folder/array.php"))
throw new Exception("didn't cache");
$start = microtime(TRUE);
$data = require("$folder/array.php");
print (microtime(TRUE) - $start)."\n";
unset($data);
}
$folder = $_GET["folder"];
for($i = 1; $i < 10000; $i += 10) {
$data = range(0, $i);
print $i.",";
writestuff($folder, $data);
readstuff($folder);
}
?>
你是如何生成圖形的? :o – Wiliam 2010-11-23 22:04:15
Excel 2011 Mac,散點圖。 – 2010-11-24 00:35:11
我認爲前者更快。但是直到你測試並分析兩個變體之後,你纔會知道。 – Gumbo 2010-11-14 21:36:11
如果數組是平的,考慮也parse_ini_file – 2010-11-14 21:38:09
你確定你沒有預先優化嗎?我不認爲這兩種方法都應該是性能瓶頸。我只是選擇你更適合的方法,或者最適合這個項目。優化在這裏聽起來不重要。 – 2010-11-14 21:38:50