php中serialize序列化与json性能测试的示例分析

最近需要对大数组做存储,需要在serialize序列化和json之间做了选择。因此需要做了性能测试。

php5.2之前对数组存储的时候,大都使用serialize系列化。php5.2之后,开始内置了 JSON 的支持

在网上看到有些资料说:json_encode和json_decode比内置的serialize和unserialize函数要高效。耳闻不如眼见,眼见不一定为实。那就用实际数据测试吧.....

我们先理解概念:

一、 序列化

序列化是将对象状态转换为可保持或可传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

将对象的状态信息转换为可以存储或传输的窗体的过程。 在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,而不依赖于该成员的可访问性。类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。 对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化。如果它必须为可序列化的,请尝试生成特定字段来保存不可序列化的重要数据。如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。


二、 JSON

JSON,JavaScript Object Notation,一种更轻、更友好的用于接口(AJAX、REST等)数据交换的格式。 JSON是结构化数据串行化的文本格式,作为XML的一种替代品,用于表示客户端与服务器间数据交换有效负载的格式。它是从ECMAScript语言标准衍生而来的。JSON的设计目标是使它成为小的、轻便的、文本的,而且是JavaScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

JSON建构有两种结构:
1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。


2.值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

测试: 三、 实际测试

在PHP 5.3下执行:我们先使用小的数据做测试:

复制代码 代码如下:


    <?php   
    $target = array (   
       'battle_id'=> 257   
       ,'user_id'=> 41248   
       ,'user_id2'=> 23989   
       ,'player'=> 41248   
       ,'formation'=> Array   
            (   
               '41248'=> 1   
               ,'23989'=> 2   
            )   

       ,'result'=> 1   
       ,'battle_type'=> 1   
       ,'speed'=> Array   
            (   
               '41248'=> 0   
               ,'23989'=> 0   
            )   
            );   

    $json = json_encode($target);   
    $seri = serialize($target);   

    echo "json :" , strlen($json) ,'<br/>';   
    echo "serialize :", strlen($seri) ,'<br/>';   

    $stime = microtime(true);   
    for ($i = 0; $i < 10000; $i ++) {   
        json_encode($target);   
    }   
    $etime = microtime(true);   

    echo "json_encode :", ($etime - $stime) ,'<br/>';   

    //----------------------------------   

    $stime = microtime(true);   
    for ($i = 0; $i < 10000; $i ++) {   
       json_decode($json,true);   
    }   
    $etime = microtime(true);   

    echo "json_decode :", ($etime - $stime),'<br/>';   

    //----------------------------------   
    $stime = microtime(true);   
    for ($i = 0; $i < 10000; $i ++) {   
        serialize($target);   
    }   
    $etime = microtime(true);   

    echo "serialize :", ($etime - $stime) ,'<br/>';   

    //----------------------------------   
    $stime = microtime(true);   
    for ($i = 0; $i < 10000; $i ++) {   
        unserialize($seri);   
    }   
    $etime = microtime(true);   

    echo "unserialize :", ($etime - $stime),'<br/>';   

    ?>   


测试结果:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6418aeeecfcb1bc2981be837e590777c.html