http://instagram-engineering.tumblr.com/post/97147584853/json-parsing
1 comment | 0 points | by WazanovaNews 約12時間前 edited
Instagramが、ig-json-parserをオープンソースで提供しています。
背景
- Androidにおける、JSONのエンコーディング/デコーディングは、dalvik特有の問題やメモリ消費が課題となる。
- Jackson ObjectMapperで上記の問題は概ね解決できるが、 シリアライズ/デシリアライズしたことのないオブジェクトを処理する際のペナルティが大きい。モバイルの起動時間に影響するケースもあるので、頭が痛い。メモリが大きく割り当てられるので、ガベージコレクタとの絡みを考慮する必要がある。作業が完了しても、大きめのメモリフットプリントを確保してしまう
- Jackson stream parsingは、ObjectMapperの問題をクリアしてくれるが、手作りのコードを都度追加しなくてはいけなくなる。面倒だし、ミスが起きやすい。よって、Jackson stream parsingの利用は、ObjectMapperがパフォーマンスに大きく影響する箇所のみに絞っていた。
ig-json-parserとは?
- そこで、自動的にstream parsing のコードを生成してくれる ig-json-parser を開発。
- JSR-269 annotation processorとして知られるコンパイルタイムプロセッサーで、ユーザが自分のコードスニペットを追加して、自動コード生成を簡単にカスタマイズできる。
Jackson / GSONとの比較
- ig-json-parserは、Jackson streaming parsingがベース。
- 生成されるコードは、json/jackso/manual serializer/deserializerに近い。そのwikiにあるベンチーマーク比較にGSONも含まれているので、参考になるかも。
#instagram #android #java #オープンソース