国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php中json和serialize 性能比較測試

2024-05-04 21:49:48
字體:
來源:轉載
供稿:網友

php中json是實時交換數據的一個常用的數據傳輸模式了,而serialize是把字符轉換成一個序列化字符串了,那么它們兩的性能那個會更好一些呢?對此小編整理了一些json和serialize 性能比較測試例子供各位學習參考.

測試1

1,操作元素較少,單個元素比較大,英文,3個元素操作1000次,代碼如下:

  1. $data = array('hello','word'); 
  2. $d = "helloword"
  3. $d = str_repeat($d, 10000); 
  4. //for($i = 0;$i $data[] = $d; 
  5. //} 
  6. //var_dump($data); 
  7. $jsonen_sarttime = getmicrotime(); 
  8. for($i=0;$i $json = json_encode($data); 
  9. echo "json長度:".strlen($json)." 
  10. n"; 
  11. $jsonen_endtime = getmicrotime(); 
  12. echo "jsonencode耗時:".($jsonen_endtime - $jsonen_sarttime)." 
  13. n"; 
  14. $jsonde_starttime = getmicrotime(); 
  15. for($i=0;$i $unjson = json_decode($json,true); 
  16. $jsonde_endtime = getmicrotime(); 
  17. echo "jsondecode耗時:".($jsonde_endtime - $jsonde_starttime)." 
  18. n"; 
  19. $seri1_starttime = getmicrotime(); 
  20. for($i=0;$i $serialize = serialize($data); 
  21. echo "serialize長度:".strlen($serialize)." 
  22. n"; 
  23. $seri1_endtime = getmicrotime(); 
  24. echo "serialize序列化耗時:".($seri1_endtime - $seri1_starttime)." 
  25. n"; 
  26. $seri2_starttime = getmicrotime(); 
  27. for($i=0;$i $unserialize = unserialize($serialize); 
  28. $seri2_endtime = getmicrotime(); 
  29. echo "serialize反序列化耗時:".($seri2_endtime - $seri2_starttime)." 
  30. n"; 
  31. /** 
  32. *獲取時間記 
  33. * @return 
  34. */ 
  35. function getmicrotime(){ 
  36. list($usec$sec) = explode(" ",microtime()); 
  37. return ((float)$usec + (float)$sec); 
  38. //output: 
  39. json長度:90019 
  40. jsonencode耗時:1.0974299907684 
  41. jsondecode耗時:1.6237480640411 
  42. serialize長度:90052 
  43. serialize序列化耗時:0.025779962539673 
  44. serialize反序列化耗時:0.029321193695068 

可以看到json在做英文處理的時候,數組元素較少,體積要小于序列化的數據.處理效率低于序列化,將data 更改為如下代碼:

  1. $data = array('hello','word'); 
  2. $d = "你好"
  3. $d = str_repeat($d, 10000); 
  4. //for($i = 0;$i $data[] = $d; 
  5. //output: 
  6. json長度:120019 
  7. jsonencode耗時:0.83260488510132 
  8. jsondecode耗時:2.2054090499878 
  9. serialize長度:60052 
  10. serialize序列化耗時:0.01835298538208 
  11. serialize反序列化耗時:0.01848292350769 

可以看到 json在做文字處理的時候,體積較大,處理效率也略低于序列化.

3.將數據更改為如下代碼:

  1. $data = array('hello','word'); 
  2. $d = "你好"
  3. for($i = 0;$i $data[] = $d
  4. //output: 
  5. json長度:150016 
  6. jsonencode耗時:2.1428198814392 
  7. jsondecode耗時:6.5845320224762 
  8. serialize長度:198939 
  9. serialize序列化耗時:2.8011980056763 
  10. serialize反序列化耗時:4.6967668533325 

可以看到json體積略小于serialize.

4.將data修改為如下代碼:

  1. $data = array('hello','word'); 
  2. $d = "hello"
  3. for($i = 0;$i $data[] = $d
  4. //output: 
  5. json長度:80016 
  6. jsonencode耗時:1.6437809467316 
  7. jsondecode耗時:4.5136170387268 
  8. serialize長度:188939 
  9. serialize序列化耗時:2.909558057785 
  10. serialize反序列化耗時:4.4678349494934 

測試2

以一個包含1000000個元素的數組做為原始數據,分別以json,serialize,igbinary進行序列化和反向操作,代碼如下:

  1. <?php 
  2. ini_set('memory_limit''512m'); 
  3. $array = array_fill(0, 1000000, rand(1, 9999)); 
  4. $start = microtime(true); 
  5. $export = json_encode($array); 
  6. $end = microtime(true); 
  7. $duration = $end - $start
  8. print('JSON Encode: ' . $duration . PHP_EOL); 
  9. $start = microtime(true); 
  10. $import = json_decode($export); 
  11. $end = microtime(true); 
  12. $duration = $end - $start
  13. print('JSON Decode: ' . $duration . PHP_EOL); 
  14. $start = microtime(true); 
  15. $export = serialize($array); 
  16. $end = microtime(true); 
  17. $duration = $end - $start
  18. print('Serialize: ' . $duration . PHP_EOL); 
  19. $start = microtime(true); 
  20. $import = unserialize($export); 
  21. $end = microtime(true); 
  22. $duration = $end - $start
  23. print('Serialize: ' . $duration . PHP_EOL); 
  24. $start = microtime(true); 
  25. $export = igbinary_serialize($array); 
  26. $end = microtime(true); 
  27. $duration = $end - $start
  28. print('Igbinary Serialize: ' . $duration . PHP_EOL); 
  29. $start = microtime(true); 
  30. $import = igbinary_unserialize($export); 
  31. $end = microtime(true); //開源軟件:Vevb.com 
  32. $duration = $end - $start
  33. print('Igbinary Serialize: ' . $duration . PHP_EOL); 
  34. ?> 
  35. //測試結果 
  36. JSON Encode: 0.084825992584229 
  37. JSON Decode: 0.34976410865784 
  38. Serialize: 0.38241410255432 
  39. Serialize: 7.7904229164124 
  40. Igbinary Serialize: 0.046916007995605 
  41. Igbinary Serialize: 0.23396801948547 

從測試結果來看,速度方面優先級排列為 igbinary > json > serialize。同時我們也可以看到,php原生的serialize在對大對象進行反向操作時,速度真是掉隊一大截了.

占用字節數對比

json:5000001

serialize:15888902

igbinary:7868681

在沒有中文字符的情況下,json勝出,igbinary次之,serialize又被甩了幾條街.

結論:

如果只是英文和數字,元素比較平均,則推薦json,體積和效率均優于序列化.

如果只是英文和數字,個別元素較大,則推薦serialize效率優于序列化.

如果中文,元素較少,推薦序列化,體積和效率均優于json.

如果中文,元素比較平均,推薦json.

如果是緩存業務,效率越高越好,如果是緩存數據,體積越小越好,也要看具體的場景.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 渑池县| 香格里拉县| 瑞金市| 隆林| 二手房| 颍上县| 贵南县| 海原县| 二连浩特市| 九台市| 新干县| 杭锦旗| 南汇区| 交城县| 尖扎县| 新泰市| 四会市| 万年县| 武邑县| 长沙市| 专栏| 兴国县| 岳西县| 堆龙德庆县| 台北县| 吐鲁番市| 遂溪县| 新源县| 繁昌县| 安徽省| 兰溪市| 东乡| 凤台县| 育儿| 太仓市| 保靖县| 潼关县| 浦江县| 承德县| 莎车县| 金昌市|