首頁  >  文章  >  後端開發  >  淺析PHP中json_encode、json_decode與serialize、unserialize的效能測試

淺析PHP中json_encode、json_decode與serialize、unserialize的效能測試

coldplay.xixi
coldplay.xixi轉載
2020-07-18 17:06:493509瀏覽

淺析PHP中json_encode、json_decode與serialize、unserialize的效能測試

今天偶然在想,如果用PHP寫一個類似BDB的基於文件的Key-Value小型數據庫用於存儲非結構化的記錄型數據,不知道效率會如何?

於是便聯想到PHP中的物件怎麼樣序列化儲存性價比最高呢?接著想到了之前同事推薦的JSON編碼和解碼函數。
據他所說,json_encodejson_decode比內建的serializeunserialize函數要高效率。
於是我決定動手實驗,證實一下同事所說的情況是否屬實。
實驗分別在PHP 5.2.13和PHP 5.3.2環境下進行。
用同一個變量,分別用以上方式編碼或解碼10000次,並得出每個函數執行10000次所需的時間。
以下是PHP 5.2.13環境其中一次測試結果:

程式碼如下:

json : 190 
serialize : 257 
json_encode : 0.08364200592041 
json_decode : 0.18004894256592 
serialize : 0.063642024993896 
unserialize : 0.086990833282471 
DONE.

以下是PHP 5.3.2環境其中一次測試結果:

程式碼如下:

json : 190 
serialize : 257 
json_encode : 0.062805891036987 
json_decode : 0.14239192008972 
serialize : 0.048481941223145 
unserialize : 0.05927300453186 
DONE.

這次實驗得到的結論是:
json_encodejson_decode的效率並沒有比serialize unserialize的效率高,在反序列化的時候效能相差兩倍左右,PHP 5.3執行效率比PHP 5.2略有提升。 

程式碼如下:

<?php 
$target = array ( 
&#39;name&#39; => &#39;全能头盔&#39;, 
&#39;quality&#39; => &#39;Blue&#39;, 
&#39;ti_id&#39; => 21302, 
&#39;is_bind&#39; => 1, 
&#39;demand_conditions&#39; => 
array ( 
&#39;HeroLevel&#39; => 1, 
), 
&#39;quality_attr_sign&#39; => 
array ( 
&#39;HeroStrength&#39; => 8, 
&#39;HeroAgility&#39; => 8, 
&#39;HeroIntelligence&#39; => 8, 
), 
); 
$json = json_encode($target); 
$seri = serialize($target); 
echo "json :\t\t" . strlen($json) . "\r\n"; 
echo "serialize :\t" . strlen($seri) . "\r\n\r\n"; 
$stime = microtime(true); 
for ($i = 0; $i < 10000; $i ++) 
{ 
json_encode($target); 
} 
$etime = microtime(true); 
echo "json_encode :\t" . ($etime - $stime) . "\r\n"; 
//---------------------------------- 
$stime = microtime(true); 
for ($i = 0; $i < 10000; $i ++) 
{ 
json_decode($json); 
} 
$etime = microtime(true); 
echo "json_decode :\t" . ($etime - $stime) . "\r\n\r\n"; 
//---------------------------------- 
$stime = microtime(true); 
for ($i = 0; $i < 10000; $i ++) 
{ 
serialize($target); 
} 
$etime = microtime(true); 
echo "serialize :\t" . ($etime - $stime) . "\r\n"; 
//---------------------------------- 
$stime = microtime(true); 
for ($i = 0; $i < 10000; $i ++) 
{ 
unserialize($seri); 
} 
$etime = microtime(true); 
echo "unserialize :\t" . ($etime - $stime) . "\r\n\r\n"; 
echo &#39;DONE.&#39;; 
?>

#相關學習推薦:PHP程式設計從入門到精通

##

以上是淺析PHP中json_encode、json_decode與serialize、unserialize的效能測試的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除