ホームページ  >  記事  >  バックエンド開発  >  php implode/explode、serialize、json、msgpack間のパフォーマンスの説明

php implode/explode、serialize、json、msgpack間のパフォーマンスの説明

jacklove
jackloveオリジナル
2018-06-09 11:07:462065ブラウズ

php implode/explode、serialize、json、msgpack のパフォーマンス比較

最初に使用implode、serialize、json_encode、msgpack_packテスト用に 4 つのテキスト ファイルを作成します。

作成コードは次のとおりです:

<?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

配列が単純な場合、json_encode は seriesize よりも小さい可能性があります。

例:

$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 < シリアライズ < json_encode##explode、unserialize、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 < msgpack_unpack <

要約すると、implode/explode は複雑な構造の使用には適していないため、serialize、json、msgpack が一般的に使用されます。 3 つの比較のうち、最適な実行速度、メモリ使用量、スペース使用量は msgpack、次にシリアライズ、最後に json です。

条件が許せば、

msgpack を使用してデータをシリアル化することをお勧めします

msgpack については、以前に書いた記事「MessagePack Serialization Format」をご覧ください。この記事では、php の implode/explode について説明します。パフォーマンスを比較するには、serialize、json、msgpack を使用してください。関連コンテンツの詳細については、php 中国語 Web サイトを参照してください。

#関連推奨事項:

php str_replace 指定回数置換する方法の説明

##header、headers_sent、headers_list、header_remove の手順について
PDO を介して mysql によって返されるフィールドの整数型を変更する解決策文字列型へ

以上がphp implode/explode、serialize、json、msgpack間のパフォーマンスの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。