【php】serialize()とjson_encode()の比較1
ある大きなデータ(100MBぐらい)を、base64_encode()して、serialize()とjson_encode()をしてみた。
・ serialize()の場合(s.php)
<?php echo serialize(array('' => base64_encode(file_get_contents('100mb.txt'))));
・ json_encode()の場合(j.php)
<?php echo json_encode(array('' => base64_encode(file_get_contents('100mb.txt'))));
結果
# time /usr/local/php/5.3.3/bin/php j.php > j.result real 0m5.635s user 0m4.039s sys 0m1.593s # time /usr/local/php/5.3.3/bin/php s.php > s.result real 0m1.662s user 0m0.384s sys 0m1.256s
ひどい使い方をした場合、json_encode()の方が遅かった。
ついでに、jsonの方は遅いだけではない。メモリの制限がきついとエラーが発生していた。メモリも必要とするらしい。
Fatal error: Allowed memory size of 419430400 bytes exhausted (tried to allocate 14680097 bytes) in /tmp/j.php on line 3
個人的にはserialize()の__sleep()や__wakeup()のコールなどのオーバーヘッドがあるんじゃないかと気になったりするのですが、やはりserialize()関数は歴史のあるよくできた処理なのでしょうか。
なお、一般に普通の配列やオブジェクトのserialize()+unserialize() と json_encode()+json_decode() は、あまり差がないようです。
異常に大きなデータや、異常に深い階層の配列などを扱わせるときにちょっと注意が必要なようです。
コメント