SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【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() は、あまり差がないようです。

異常に大きなデータや、異常に深い階層の配列などを扱わせるときにちょっと注意が必要なようです。

関連するメモ

コメント