设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php里json和serialize 性能比较测试

发布时间:2022-02-23 14:51 所属栏目:121 来源:互联网
导读:php中json是实时交换数据的一个常用的数据传输模式了,而serialize是把字符转换成一个序列化字符串了,那么它们两的性能那个会更好一些呢?对此小编整理了一些json和serialize 性能比较测试例子供各位学习参考. 测试1 1,操作元素较少,单个元素比较大,英文,3个
  php中json是实时交换数据的一个常用的数据传输模式了,而serialize是把字符转换成一个序列化字符串了,那么它们两的性能那个会更好一些呢?对此小编整理了一些json和serialize 性能比较测试例子供各位学习参考.
 
  测试1
 
  1,操作元素较少,单个元素比较大,英文,3个元素操作1000次,代码如下:
 
  $data = array('hello','word');
  $d = "helloword";
  $d = str_repeat($d, 10000);
  //for($i = 0;$i $data[] = $d;
  //}
  //var_dump($data);
  $jsonen_sarttime = getmicrotime();
  for($i=0;$i $json = json_encode($data);
  }
  echo "json长度:".strlen($json)."
  n";
  $jsonen_endtime = getmicrotime();
  echo "jsonencode耗时:".($jsonen_endtime - $jsonen_sarttime)."
  n";
  $jsonde_starttime = getmicrotime();
  for($i=0;$i $unjson = json_decode($json,true);
  }
  $jsonde_endtime = getmicrotime();
  echo "jsondecode耗时:".($jsonde_endtime - $jsonde_starttime)."
  n";
  $seri1_starttime = getmicrotime();
  for($i=0;$i $serialize = serialize($data);
  }
  echo "serialize长度:".strlen($serialize)."
  n";
  $seri1_endtime = getmicrotime();
  echo "serialize序列化耗时:".($seri1_endtime - $seri1_starttime)."
  n";
  $seri2_starttime = getmicrotime();
  for($i=0;$i $unserialize = unserialize($serialize);
  }
  $seri2_endtime = getmicrotime();
  echo "serialize反序列化耗时:".($seri2_endtime - $seri2_starttime)."
  n";
  /**
  *获取时间记
  * @return
  */
  function getmicrotime(){
  list($usec, $sec) = explode(" ",microtime());
  return ((float)$usec + (float)$sec);
  }
  //output:
  json长度:90019
  jsonencode耗时:1.0974299907684
  jsondecode耗时:1.6237480640411
  serialize长度:90052
  serialize序列化耗时:0.025779962539673
  serialize反序列化耗时:0.029321193695068
  可以看到json在做英文处理的时候,数组元素较少,体积要小于序列化的数据.处理效率低于序列化,将data 更改为如下代码:
 
  $data = array('hello','word');
  $d = "你好";
  $d = str_repeat($d, 10000);
  //for($i = 0;$i $data[] = $d;
  //output:
  json长度:120019
  jsonencode耗时:0.83260488510132
  jsondecode耗时:2.2054090499878
  serialize长度:60052
  serialize序列化耗时:0.01835298538208
  serialize反序列化耗时:0.01848292350769
  可以看到 json在做文字处理的时候,体积较大,处理效率也略低于序列化.
 
  3.将数据更改为如下代码:
 
  $data = array('hello','word');
  $d = "你好";
  for($i = 0;$i $data[] = $d;
  }
  //output:
  json长度:150016
  jsonencode耗时:2.1428198814392
  jsondecode耗时:6.5845320224762
  serialize长度:198939
  serialize序列化耗时:2.8011980056763
  serialize反序列化耗时:4.6967668533325
  可以看到json体积略小于serialize.
 
  4.将data修改为如下代码:
 
  $data = array('hello','word');
  $d = "hello";
  for($i = 0;$i $data[] = $d;
  }
  //output:
  json长度:80016
  jsonencode耗时:1.6437809467316
  jsondecode耗时:4.5136170387268
  serialize长度:188939
  serialize序列化耗时:2.909558057785
  serialize反序列化耗时:4.4678349494934
  测试2
 
  以一个包含1000000个元素的数组做为原始数据,分别以json,serialize,igbinary进行序列化和反向操作,代码如下:
 
  <?php
  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); //开源软件:Cuoxin.com
  $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又被甩了几条街.
 
  结论:
 
  如果只是英文和数字,元素比较平均,则推荐json,体积和效率均优于序列化.
 
  如果只是英文和数字,个别元素较大,则推荐serialize效率优于序列化.
 
  如果中文,元素较少,推荐序列化,体积和效率均优于json.
 
  如果中文,元素比较平均,推荐json.
 
  如果是缓存业务,效率越高越好,如果是缓存数据,体积越小越好,也要看具体的场景.

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读