当前位置:首页 > PHP教程 > php应用 > 列表

浅析PHP中json_encode、json_decode与serialize、unserialize的性能测试

发布:smiling 来源: PHP粉丝网  添加日期:2022-07-13 11:14:55 浏览: 评论:0 

今天偶然在想,如果用PHP写一个类似BDB的基于文件的Key-Value小型数据库用于存储非结构化的记录型数据,不知道效率会如何?

于是便联想到PHP中的对象怎么样序列化存储性价比最高呢?接着想到了之前同事推荐的JSON编码和解码函数。

据他所说,json_encode和json_decode比内置的serialize和unserialize函数要高效。

于是我决定动手实验,证实一下同事所说的情况是否属实。

实验分别在PHP 5.2.13和PHP 5.3.2环境下进行。

用同一个变量,分别用以上方式进行编码或解码10000次,并得出每个函数执行10000次所需的时间。

以下是PHP 5.2.13环境其中一次测试结果:

代码如下:

  1. json : 190  
  2.  
  3. serialize : 257  
  4.  
  5. json_encode : 0.08364200592041  
  6.  
  7. json_decode : 0.18004894256592  
  8.  
  9. serialize : 0.063642024993896  
  10.  
  11. unserialize : 0.086990833282471  
  12.  
  13. DONE. 

以下是PHP 5.3.2环境其中一次测试结果:

代码如下:

  1. json : 190  
  2.  
  3. serialize : 257  
  4.  
  5. json_encode : 0.062805891036987  
  6.  
  7. json_decode : 0.14239192008972  
  8.  
  9. serialize : 0.048481941223145  
  10.  
  11. unserialize : 0.05927300453186  
  12.  
  13. DONE. 

这次实验得到的结论是:

json_encode和json_decode的效率并没有比serialize和unserialize的效率高,在反序列化的时候性能相差两倍左右,PHP 5.3执行效率比PHP 5.2略有提升。

代码如下:

  1. <?php  
  2.  
  3. $target = array (  
  4.  
  5. 'name' => '全能头盔',  
  6.  
  7. 'quality' => 'Blue',  
  8.  
  9. 'ti_id' => 21302,  
  10.  
  11. 'is_bind' => 1,  
  12.  
  13. 'demand_conditions' =>  
  14.  
  15. array (  
  16.  
  17. 'HeroLevel' => 1,  
  18.  
  19. ),  
  20.  
  21. 'quality_attr_sign' =>  
  22.  
  23. array (  
  24.  
  25. 'HeroStrength' => 8,  
  26.  
  27. 'HeroAgility' => 8,  
  28.  
  29. 'HeroIntelligence' => 8,  
  30.  
  31. ),  
  32.  
  33. );  
  34.  
  35. $json = json_encode($target);  
  36.  
  37. $seri = serialize($target);  
  38.  
  39. echo "json :\t\t" . strlen($json) . "\r\n";  
  40.  
  41. echo "serialize :\t" . strlen($seri) . "\r\n\r\n";  
  42.  
  43. $stime = microtime(true);  
  44.  
  45. for ($i = 0; $i < 10000; $i ++)  
  46.  
  47. {  
  48.  
  49. json_encode($target);  
  50.  
  51. }  
  52.  
  53. $etime = microtime(true);  
  54.  
  55. echo "json_encode :\t" . ($etime - $stime) . "\r\n";  
  56.  
  57. //----------------------------------  
  58.  
  59. $stime = microtime(true);  
  60.  
  61. for ($i = 0; $i < 10000; $i ++)  
  62.  
  63. {  
  64.  
  65. json_decode($json);  
  66.  
  67. }  
  68.  
  69. $etime = microtime(true);  
  70.  
  71. echo "json_decode :\t" . ($etime - $stime) . "\r\n\r\n";  
  72.  
  73. //----------------------------------  
  74.  
  75. $stime = microtime(true);  
  76.  
  77. for ($i = 0; $i < 10000; $i ++)  
  78.  
  79. {  
  80.  
  81. serialize($target);  
  82.  
  83. }  
  84.  
  85. $etime = microtime(true);  
  86.  
  87. echo "serialize :\t" . ($etime - $stime) . "\r\n";  
  88.  
  89. //----------------------------------  
  90.  
  91. $stime = microtime(true);  
  92.  
  93. for ($i = 0; $i < 10000; $i ++)  
  94.  
  95. {  
  96.  
  97. unserialize($seri);  
  98.  
  99. }  
  100.  
  101. $etime = microtime(true);  
  102.  
  103. echo "unserialize :\t" . ($etime - $stime) . "\r\n\r\n";  
  104.  
  105. echo 'DONE.';  
  106.  
  107. ?>

Tags: json_encode json_decode

分享到: