首頁 >後端開發 >php教程 >對php implode/explode, serialize, json, msgpack 之間效能的解說

對php implode/explode, serialize, json, msgpack 之間效能的解說

jacklove
jacklove原創
2018-06-09 11:07:462084瀏覽

php implode/explode, serialize, json, msgpack 效能比較

首先使用implode, serialize, json_encode, msgpack_packimplode, serialize, json_encode, msgpack_pack

#建立四個文字文件,用於測試。

建立程式碼如下:


<?php
$arr = array(
    &#39;content1&#39; => &#39;一二三四五六七八九十&#39;,
    &#39;content2&#39; => &#39;一二三四五六七八九十&#39;,
    &#39;content3&#39; => &#39;一二三四五六七八九十&#39;
);
echo file_put_contents(&#39;implode.txt&#39;, implode(&#39;,&#39;,$arr), true).&#39;<br>&#39;;
echo file_put_contents(&#39;serialize.txt&#39;, serialize($arr), true).&#39;<br>&#39;;
echo file_put_contents(&#39;json.txt&#39;, json_encode($arr), true).&#39;<br>&#39;;
echo file_put_contents(&#39;msgpack.txt&#39;, msgpack_pack($arr), true);
?>

#建立後產生



implode.txt 92位元組
serialize.txt   165位元組
json.txt          223位元組

msgpack.txt  121位元組

##所產生的字串大小排序如下implode < msgpack_pack < serialize < json_encode

如果陣列簡單,則json_encode有可能比serialize小

例如:

$arr = array(&#39;一&#39;,&#39;二&#39;,&#39;三&#39;,&#39;四&#39;,&#39;五&#39;,&#39;六&#39;,&#39;七&#39;,&#39;八&#39;,&#39;九&#39;,&#39;十&#39;);
serialize   為147位元組

json_encode 為91位元組

#比較implode, serialize, json_encode, msgpack_pack 效能

<?php
$arr = array(
    &#39;content1&#39; => &#39;一二三四五六七八九十&#39;,
    &#39;content2&#39; => &#39;一二三四五六七八九十&#39;,
    &#39;content3&#39; => &#39;一二三四五六七八九十&#39;
);
$start = microtime(true);
$i = 1000000;
while($i>0){
    // 分别测试运行时间及内存使用情况
    $tmp = implode(&#39;,&#39;,$arr);
    // $tmp = serialize($arr);
    // $tmp = json_encode($arr);
    // $tmp = msgpack_pack($arr);
    $i--;
}
$end = microtime(true);
echo &#39;run time:&#39;.($end-$start).&#39;s<br>&#39;;
echo &#39;memory usage:&#39;.(memory_get_usage()/1024).&#39;KB&#39;;
?>
implode       1.3225722312927s    628.50KB
serialize     2.0553789138794s    628.32KB
json_encode   2.5058920383453s    628.34KB
msgpack_pack  1.6431028842926s    628.24KB
#結果:記憶體使用量差不多,運行時間implode < msgpack_pack < serialize < json_encode

比較explode, unserialize, json_decode , msgpack_unpack 效能

<?php
$data = file_get_contents(&#39;implode.txt&#39;);
//$data = file_get_contents(&#39;serialize.txt&#39;);
//$data = file_get_contents(&#39;json.txt&#39;);
//$data = file_get_contents(&#39;msgpack.txt&#39;);
$start = microtime(true);
$i = 1000000;
while($i>0){
    $tmp = explode(&#39;,&#39;,$data);
    //$tmp = unserialize($data);
    //$tmp = json_decode($data, true);
    //$tmp = msgpack_unpack($data);
    $i--;
}
$end = microtime(true);
echo &#39;run time:&#39;.($end-$start).&#39;s<br>&#39;;
echo &#39;memory usage:&#39;.(memory_get_usage()/1024).&#39;KB&#39;;
?>
explode         1.7446749210358s    628.74KB
unserialize     2.1386790275574s    628.67KB
json_decode     5.2423169612885s    628.84KB
msgpack_unpack  2.2290098667145s    628.63KB
結果:記憶體使用量差不多,運行時間explode < serialize < msgpack_unpack < json_decode

總結,由於implode/explode不適合使用複雜的結構,因此常用的為serialize,json,msgpack三種。

而三個比較,運行速度,記憶體佔用,空間佔用最優為msgpack, 其次是serialize,最後是json。

如有條件,建議使用msgpack序列化處理資料

關於msgpack 可以查看我之前寫的文章:《MessagePack 序列化格式》

本文對php implode/explode, serialize, json , msgpack 之間效能進行比較,更多相關內容請關注php中文網。

相關推薦:

php str_replace 取代指定次數方法的解說

關於header,headers_sent,headers_list,header_remove 使用說明

透過PDO 查詢mysql傳回欄位整數變成String型的解決方法

####

以上是對php implode/explode, serialize, json, msgpack 之間效能的解說的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn