igbinary vs serialize vs json_encode

最近看到memcached擴展支持額外的序列化方式 —igbinary,這是一個未收錄到pecl的php擴展,它提供的兩個主要方法:

  • igbinary_serialize

  • igbinary_unserialize

據稱可以用它來代替php自帶的序列化函數serialize,性能更好,而且佔用的字節數也更少。下面我就 igbinary ,serialize ,json_encode三者的性能做了一個簡單的測試。

測試

以一個包含1000000個元素的數組做爲原始數據,分別以json, serialize, igbinary進行序列化和反向操作。

<?php
ini_set('memory_limit', '512m');
$array = array_fill(0, 1000000, rand(1, 9999));
$start = microtime(true);
$export = json_encode($array);
$end = microtime(true);
$duration = $end - $start;
print('JSON Encode: ' . $duration . PHP_EOL);
$start = microtime(true);
$import = json_decode($export);
$end = microtime(true);
$duration = $end - $start;
print('JSON Decode: ' . $duration . PHP_EOL);
$start = microtime(true);
$export = serialize($array);
$end = microtime(true);
$duration = $end - $start;
print('Serialize: ' . $duration . PHP_EOL);
$start = microtime(true);
$import = unserialize($export);
$end = microtime(true);
$duration = $end - $start;
print('Serialize: ' . $duration . PHP_EOL);
$start = microtime(true);
$export = igbinary_serialize($array);
$end = microtime(true);
$duration = $end - $start;
print('Igbinary Serialize: ' . $duration . PHP_EOL);
$start = microtime(true);
$import = igbinary_unserialize($export);
$end = microtime(true);
$duration = $end - $start;
print('Igbinary Serialize: ' . $duration . PHP_EOL);
?>


測試結果

JSON Encode: 0.076992034912109
JSON Decode: 0.47485995292664
Serialize: 0.42043685913086
Serialize: 0.27616095542908
Igbinary Serialize: 0.049700975418091
Igbinary Serialize: 0.22004795074463

從測試結果來看,速度方面優先級排列爲 igbinary > json > serialize。同時我們也可以看到,php原生的serialize在對大對象進行反向操作時,速度真是掉隊一大截了。

佔用字節數對比

  • json: 5000001

  • serialize: 15888902

  • igbinary: 7868681


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章