PHPのunserializeとjson_decodeの速度を比較してみた

serialize後の文字列には長さが格納されている。一方、jsonは終端文字の検出が必要である。
そのため文字列が入っていた場合はunserializeの方が速いはず、という予想を立てて比較してみた。

数値の場合

配列に数値を格納。
10/100は10個の配列に100までの数を格納。

関数 10/100 100/10000 1000/1000000
serialize 0.002965 ms 0.026016 ms 0.175710 ms
unserialize 0.002285 ms 0.019043 ms 0.139641 ms
json_encode 0.001065 ms 0.008745 ms 0.045797 ms
json_decode 0.002701 ms 0.018625 ms 0.192634 ms

文字列の場合

連想配列に文字列を格納。
10/10は10個の配列に長さ10の文字列を格納。

関数 10/10 100/100 1000/100 100/1000
serialize 0.002051 ms 0.023947 ms 0.221336 ms 0.078479 ms
unserialize 0.002071 ms 0.022763 ms 0.335602 ms 0.038826 ms
json_encode 0.003094 ms 0.112962 ms 1.140379 ms 0.961482 ms
json_decode 0.004587 ms 0.136636 ms 1.447683 ms 1.014543 ms

環境はPHP 5.3.3-7+squeeze1 / core2duo E8600

予想通り、文字列の長さが長くなるほど、json_decodeよりunserializeの方が速かった。
ソース: https://github.com/firewood/test/blob/master/serialize_bench.php