Android上でJSONとMessagePackの簡単なベンチマークをとってみた
ベンチの概要としては、100byte x 50000の配列、100byte(value) x 30000の辞書をJSON, MessagePackでシリアライズ・デシリアライズしてどんなもんか見てみようかと。
- Android2.2(IS06)の場合
I/MsgpackExampleActivity ( 8963): benchmarkJsonArray: serialize start I/MsgpackExampleActivity ( 8963): benchmarkJsonArray: serialize end :6421 I/MsgpackExampleActivity ( 8963): benchmarkJsonArray: deserialize start D/MsgpackExampleActivity ( 8963): benchmarkJsonArray: size=50000 I/MsgpackExampleActivity ( 8963): benchmarkJsonArray: deserialize end :1423 I/MsgpackExampleActivity ( 8963): benchmarkJsonMap: serialize start I/MsgpackExampleActivity ( 8963): benchmarkJsonMap: serialize end :3282 I/MsgpackExampleActivity ( 8963): benchmarkJsonMap: deserialize start D/MsgpackExampleActivity ( 8963): benchmarkJsonMap: size=30000 I/MsgpackExampleActivity ( 8963): benchmarkJsonMap: deserialize end :1044 I/MsgpackExampleActivity ( 8963): benchmarkMsgpackDynamicArray: serialize start I/MsgpackExampleActivity ( 8963): benchmarkMsgpackDynamicArray: serialize end :14636 I/MsgpackExampleActivity ( 8963): benchmarkMsgpackDynamicArray: deserialize start I/MsgpackExampleActivity ( 8963): benchmarkMsgpackDynamicArray: deserialize end :16284 I/MsgpackExampleActivity ( 8963): benchmarkMsgpackDynamicMap: serialize start I/MsgpackExampleActivity ( 8963): benchmarkMsgpackDynamicMap: serialize end :19394 I/MsgpackExampleActivity ( 8963): benchmarkMsgpackDynamicMap: deserialize start I/MsgpackExampleActivity ( 8963): benchmarkMsgpackDynamicMap: deserialize end :17350
- Android 4.2 (Nexus7)
I/MsgpackExampleActivity (20424): benchmarkJsonArray: serialize start I/MsgpackExampleActivity (20424): benchmarkJsonArray: serialize end :2818 I/MsgpackExampleActivity (20424): benchmarkJsonArray: deserialize start D/MsgpackExampleActivity (20424): benchmarkJsonArray: size=50000 I/MsgpackExampleActivity (20424): benchmarkJsonArray: deserialize end :597 I/MsgpackExampleActivity (20424): benchmarkJsonMap: serialize start I/MsgpackExampleActivity (20424): benchmarkJsonMap: serialize end :1897 I/MsgpackExampleActivity (20424): benchmarkJsonMap: deserialize start D/MsgpackExampleActivity (20424): benchmarkJsonMap: size=30000 I/MsgpackExampleActivity (20424): benchmarkJsonMap: deserialize end :614 I/MsgpackExampleActivity (20424): benchmarkMsgpackDynamicArray: serialize start I/MsgpackExampleActivity (20424): benchmarkMsgpackDynamicArray: serialize end :1121 I/MsgpackExampleActivity (20424): benchmarkMsgpackDynamicArray: deserialize start I/MsgpackExampleActivity (20424): benchmarkMsgpackDynamicArray: deserialize end :6300 I/MsgpackExampleActivity (20424): benchmarkMsgpackDynamicMap: serialize start I/MsgpackExampleActivity (20424): benchmarkMsgpackDynamicMap: serialize end :1117 I/MsgpackExampleActivity (20424): benchmarkMsgpackDynamicMap: deserialize start I/MsgpackExampleActivity (20424): benchmarkMsgpackDynamicMap: deserialize end :7754
眠いので結果に関しては整形して見やすくしたりしない方向で....
自分でも見づらかったので整形 (単位はmsec)。
Android2.2 | Android4.2 | ||
Array S | JSON | 6421 | 2818 |
Msgpack | 14636 | 1121 | |
Array D | JSON | 1423 | 597 |
Msgpack | 16284 | 6300 | |
Map S | JSON | 3282 | 1894 |
Msgpack | 19394 | 1117 | |
Map D | JSON | 1044 | 614 |
Msgpack | 17350 | 7754 |
あと、三回程度繰り替えしても大体同じ結果。
結果の概要:
- Android2.2かつ低スペックのIS06ではJSONの方が総じて速かった。シリアライズが2.5〜6倍程度、デシリアライズが10〜16倍程度。
- Android4.2で高スペックのNexus7ではシリアライズに関してはmsgpackのほうが2倍程度速く、デシリアライズに関してはJSONのほうが10倍程度速かった。
- MessagePack on Androidはデシリアライズが結構遅め?
まだあんまりMessagePackの仕様について把握して無いので、もうちょっと原理を抑えてから再度試みてみたい(そして眠りたい)。あと、別の要因がからんでいるかも、とか。