igbinary vs serialize vs json_encode

igbinary vs serialize vs json_encode

转载自: http://blog.rebill.info/archives/igbinary-vs-serialize-vs-json_encode.html

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

  • igbinary_serialize
  • igbinary_unserialize

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

测试

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

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.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又被甩了几条街。

一图顶千言

柱状图越矮小的性能越好

原文地址:http://www.ooso.net/archives/538

你可能感兴趣的:(igbinary vs serialize vs json_encode)