igbinary vs serialize vs json_encode

来源:互联网 发布:网络污词大全 编辑:程序博客网 时间:2024/05/01 17:41

http://www.ooso.net/archives/538




最近看到memcached扩展支持额外的序列化方式 — igbinary,这是一个未收录到pecl的php扩展,它提供的两个主要方法:

    • igbinary_serialize
    • igbinary_unserialize

据称可以用它来代替php自带的序列化函数serialize,性能更好,而且占用的字节数也更少。下面我就 igbinary ,serialize ,json_encode三者的性能做了一个简单的测试。

测试

以一个包含1000000个元素的数组做为原始数据,分别以json, serialize, igbinary进行序列化和反向操作。

<?phpini_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.084825992584229
JSON Decode: 0.34976410865784
Serialize: 0.38241410255432
Serialize: 7.7904229164124
Igbinary Serialize: 0.046916007995605
Igbinary Serialize: 0.23396801948547

从测试结果来看,速度方面优先级排列为 igbinary > json > serialize。同时我们也可以看到,php原生的serialize在对大对象进行反向操作时,速度真是掉队一大截了。

占用字节数对比

    • json: 5000001
    • serialize: 15888902
    • igbinary: 7868681

在没有中文字符的情况下,json胜出,igbinary次之,serialize又被甩了几条街。

一图顶千言

柱状图越矮小的性能越好


0 0
原创粉丝点击