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