ホームページ >バックエンド開発 >PHPチュートリアル >PHP での json_encode、json_decode、およびシリアル化とシリアル化解除のパフォーマンス テストの簡単な分析
今日たまたま考えたのですが、PHP を使用して、BDB に似たファイルベースの Key-Value の小さなデータベースを作成して、非構造化レコード型データを保存すると、どれほど効率的になるだろうかと考えました。なるだろうか?
そこで、PHP で最もコストパフォーマンスの高いオブジェクトをシリアル化して保存する方法を考えました。そこで、以前の同僚が推奨していた JSON エンコードおよびデコード関数を思い出しました。
彼によると、json_encode
と json_decode
は、組み込み関数 serialize
と unserialize
よりも効率的です。
そこで私は、同僚の言ったことが真実かどうかを確認するために実験を行うことにしました。
実験はそれぞれ PHP 5.2.13 環境と PHP 5.3.2 環境で実施されました。
同じ変数を使用して上記の方法でエンコードまたはデコードを 10,000 回実行し、各関数を 10,000 回実行するのに必要な時間を取得します。
以下は、PHP 5.2.13 環境でのテスト結果の 1 つです:
コードは次のとおりです:
json : 190 serialize : 257 json_encode : 0.08364200592041 json_decode : 0.18004894256592 serialize : 0.063642024993896 unserialize : 0.086990833282471 DONE.
以下は、PHP 5.2.13 環境でのテスト結果の 1 つです。 PHP 5.3.2 環境:
コードは次のとおりです:
json : 190 serialize : 257 json_encode : 0.062805891036987 json_decode : 0.14239192008972 serialize : 0.048481941223145 unserialize : 0.05927300453186 DONE.
この実験から得られた結論は次のとおりです: json_encode
および json_decode
は、serialize
よりも効率的ではありませんが、unserialize
は非常に効率的です。デシリアライズ時のパフォーマンスの差は、PHP 5.3 の約 2 倍です。PHP 5.3 の実行効率はわずかに異なります。 PHP 5.2と比較して改善されました。
コードは次のとおりです:
<?php $target = array ( 'name' => '全能头盔', 'quality' => 'Blue', 'ti_id' => 21302, 'is_bind' => 1, 'demand_conditions' => array ( 'HeroLevel' => 1, ), 'quality_attr_sign' => array ( 'HeroStrength' => 8, 'HeroAgility' => 8, 'HeroIntelligence' => 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 'DONE.'; ?>
関連する学習の推奨事項: PHP プログラミングの入門から熟練度まで
以上がPHP での json_encode、json_decode、およびシリアル化とシリアル化解除のパフォーマンス テストの簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。