源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-02-16 14:15 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:php中serialize序列化与json性能测试的示例分析
最近需要对大数组做存储,需要在serialize序列化和json之间做了选择。因此需要做了性能测试。 在php5.2之前对数组存储的时候,大都使用serialize系列化。php5.2之后,开始内置了 JSON 的支持 在网上看到有些资料说:json_encode和json_decode比内置的serialize和unserialize函数要高效。耳闻不如眼见,眼见不一定为实。那就用实际数据测试吧..... 我们先理解概念: [b][/b] [h1]一、 序列化[/h1] 序列化是将对象状态转换为可保持或可传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。 将对象的状态信息转换为可以存储或传输的窗体的过程。 在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。 通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,而不依赖于该成员的可访问性。类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。 对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化。如果它必须为可序列化的,请尝试生成特定字段来保存不可序列化的重要数据。如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。 [h1]二、 JSON[/h1] 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)。 测试: [h1]三、 实际测试[/h1] 在PHP 5.3下执行:我们先使用小的数据做测试:
[u]复制代码[/u] 代码如下:
    <?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/>';        ?>   
测试结果:
json :156 serialize :222 json_encode :0.1087498664856 json_decode :0.12652111053467 serialize :0.041656017303467 unserialize :0.040987968444824 测试结果看出json效率稍微比serialize差点,在php5.2可能会更差。应该是在php5.3之后,json扩展做了优化。 然后使用大数组做测试(代码放到最后,因为代码的数组比较长): 测试结果: json :5350 serialize :8590 json_encode :0.90479207038879 json_decode :1.753741979599 serialize :1.3566699028015 unserialize :1.3003630638123 我们可以看出,serialize比json差了快一个数量级。 总结: 1) 空间的比较 serialize在编码后大概是json的1.5倍 [b]原因:[/b] [list] [*]serialize后字符串包含了子串的长度,这可能是速度方面的优化,但是测试结果不尽人意[b]。[/b][/*] [*]serialize有更加详细的类型区分,而json只有四种类型,并且是以简单的符号表示。[/*] [*]2)速度的比较[/*] [*]在较小数据的情况下, serialize比json快数量级。 在大数据量的情况下,json比serialize稍微差一点 3)处理对象 json无法处理对象方法等数据。 4)使用范围 [list]
  • 序列化使用serialize,特别是对象的存储。这是其存在的意义。[/*] [*]与对象无关的数据存储可以使用json,如包含大量数字的数组等。[/*] [*] [list]
  • [b]在前后端交互一般都使用JSON,另外,目前JSON只支持UTF-8编码的数据。[/b][/*][/list]
  • [/list][/list]
    [u]复制代码[/u] 代码如下:
     <?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  )     ,'attacker'=> Array(      '1'=> Array (                     'user_id'=> 41248                     ,'soldier_id'=> 28                     ,'prototype_id'=> 4                     ,'bid'=> 1                     ,'level'=> 1                     ,'rare'=> 1                     ,'skill_id'=> 1                     ,'totalhp'=> 3997                     ,'hp'=> 3997                     ,'attack_general'=> 346                     ,'attack_skill'=> 596                     ,'attack_explode'=> 458                     ,'attack_type'=> 1                     ,'defense'=> 0                     ,'anger'=> 50                     ,'dodge'=> 2                     ,'crit'=> 2                     ,'block'=> 2                     ,'block_effect'=> 0.5                     ,'crit_effect'=> 2                     ,'foramtion_effect'=> 0)             ,'4'=> Array (                     'user_id'=> 41248                     ,'soldier_id'=> 29                     ,'prototype_id'=> 2                     ,'bid'=> 1                     ,'level'=> 1                     ,'rare'=> 1                     ,'skill_id'=> 1                     ,'totalhp'=> 3555                     ,'hp'=> 3555                     ,'attack_general'=> 396                     ,'attack_skill'=> 581                     ,'attack_explode'=> 418                     ,'attack_type'=> 1                     ,'defense'=> 0                     ,'anger'=> 50                     ,'dodge'=> 2                     ,'crit'=> 2                     ,'block'=> 0                     ,'block_effect'=> 0.5                     ,'crit_effect'=> 2                     ,'foramtion_effect'=> 0                  )             ,'5'=> Array                (                     'user_id'=> 41248                     ,'soldier_id'=> 30                     ,'prototype_id'=> 6                     ,'bid'=> 1                     ,'level'=> 1                     ,'rare'=> 1                     ,'skill_id'=> 1                     ,'totalhp'=> 3043                     ,'hp'=> 3043                     ,'attack_general'=> 351                     ,'attack_skill'=> 540                     ,'attack_explode'=> 474                     ,'attack_type'=> 1                     ,'defense'=> 0                     ,'anger'=> 50                     ,'dodge'=> 2                     ,'crit'=> 2                     ,'block'=> 0                     ,'block_effect'=> 0.5                     ,'crit_effect'=> 2                     ,'foramtion_effect'=> 0)             ,'7'=> Array (                     'user_id'=> 41248                     ,'soldier_id'=> 37                     ,'prototype_id'=> 2                     ,'bid'=> 1                     ,'level'=> 1                     ,'rare'=> 1                     ,'skill_id'=> 1                     ,'totalhp'=> 3491                     ,'hp'=> 3491                     ,'attack_general'=> 393                     ,'attack_skill'=> 532                     ,'attack_explode'=> 456                     ,'attack_type'=> 1                     ,'defense'=> 0                     ,'anger'=> 50                     ,'dodge'=> 2                     ,'crit'=> 2                     ,'block'=> 0                     ,'block_effect'=> 0.5                     ,'crit_effect'=> 2                     ,'foramtion_effect'=> 0   ))     ,'defender'=> Array(             '2'=> Array(                     'user_id'=> 23989                     ,'soldier_id'=> 24                     ,'prototype_id'=> 1                     ,'bid'=> 1                     ,'level'=> 1                     ,'rare'=> 1                     ,'skill_id'=> 1                     ,'totalhp'=> 3230                     ,'hp'=> 3230                     ,'attack_general'=> 390                     ,'attack_skill'=> 567                     ,'attack_explode'=> 442                     ,'attack_type'=> 1                     ,'defense'=> 0                     ,'anger'=> 50                     ,'dodge'=> 2                     ,'crit'=> 2                     ,'block'=> 0                     ,'block_effect'=> 0.5                     ,'crit_effect'=> 2                     ,'foramtion_effect'=> 0)             ,'5'=> Array(                     'user_id'=> 23989                     ,'soldier_id'=> 25                     ,'prototype_id'=> 2                     ,'bid'=> 1                     ,'level'=> 1                     ,'rare'=> 1                     ,'skill_id'=> 1                     ,'totalhp'=> 3400                     ,'hp'=> 3400                     ,'attack_general'=> 379                     ,'attack_skill'=> 536                     ,'attack_explode'=> 405                     ,'attack_type'=> 1                     ,'defense'=> 0                     ,'anger'=> 50                     ,'dodge'=> 2                     ,'crit'=> 2                     ,'block'=> 0                     ,'block_effect'=> 0.5                     ,'crit_effect'=> 2                     ,'foramtion_effect'=> 0 )             ,'7'=> Array(                     'user_id'=> 23989                     ,'soldier_id'=> 26                     ,'prototype_id'=> 6                     ,'bid'=> 1                     ,'level'=> 1                     ,'rare'=> 1                     ,'skill_id'=> 1                     ,'totalhp'=> 3669                     ,'hp'=> 3669                     ,'attack_general'=> 362                     ,'attack_skill'=> 549                     ,'attack_explode'=> 426                     ,'attack_type'=> 1                     ,'defense'=> 0                     ,'anger'=> 50                     ,'dodge'=> 2                     ,'crit'=> 2                     ,'block'=> 0                     ,'block_effect'=> 0.5                     ,'crit_effect'=> 2                     ,'foramtion_effect'=> 0 )             ,'9'=> Array(                     'user_id'=> 23989                     ,'soldier_id'=> 27                     ,'prototype_id'=> 1                     ,'bid'=> 1                     ,'level'=> 1                     ,'rare'=> 1                     ,'skill_id'=> 1                     ,'totalhp'=> 3618                     ,'hp'=> 3618                     ,'attack_general'=> 326                     ,'attack_skill'=> 510                     ,'attack_explode'=> 419                     ,'attack_type'=> 1                     ,'defense'=> 0                     ,'anger'=> 50                     ,'dodge'=> 2                     ,'crit'=> 2                     ,'block'=> 0                     ,'block_effect'=> 0.5                     ,'crit_effect'=> 2                     ,'foramtion_effect'=> 0) )     ,'battle_process'=> Array(             '0'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'1'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'2'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'3'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'4'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'5'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'6'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'7'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'8'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'9'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'10'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'11'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'12'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'13'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'14'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'15'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'16'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'17'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)                     ,'dhp'=> Array('0'=> 2019  )                     ,'attacker_anger'=> 66                     ,'defender_anger'=> Array('0'=> 94 )                     ,'skill'=> 0                     ,'state'=> 0                  )             ,'18'=> Array(                     'user_id'=> 41248                     ,'asid'=> 28                     ,'bsid'=> Array( '0'=> 26 )                     ,'harm'=> Array('0'=> 1650)       &nbs
    • 全部评论(0)
    联系客服
    客服电话:
    400-000-3129
    微信版

    扫一扫进微信版
    返回顶部