JavaCCに勝った
以前作ったJavaccのparserと速度を比較してみた。生成されるオブジェクトはまったく同じなので純粋に速度だけ比較できているはず(とはいえJavaccにはあまり詳しくないので適切なチューニングができていない可能性はあるけど)。
データは相変わらず郵便番号データ(array、string、numberはあるけどobject、boolean、nullがないので結構いまいちなのよね本当は。でも大量データって良いのがなかなか見つからなくて。ランダム生成でもしてみるか?)。
回数 | JavaCC | JSONIC |
---|---|---|
1 | 4360ms | 2281ms |
2 | 4266ms | 2297ms |
3 | 4547ms | 2297ms |
4 | 4078ms | 2281ms |
5 | 4390ms | 2281ms |
平均 | 4328.2ms | 2287.4ms |
結構圧倒的。JavaCC側のソースコードを読んでみたけど、文字列を解析した後にエスケープを解除するような処理にしてしまっているので、そこに時間がかかってるのだろうとその処理をはずしてみたけど300ms程度しか早くならずJSONICの優位は揺ぎない。
汎用のコンパイラ・コンパイラの方が速いと思っていたけど、そうでもないなぁ、と思う次第。まぁ、これはJSONみたいな非常に簡単な文法だから許される話でそうじゃなければとてもやってられないのだろうけど。
[追記] staticパーサにしたら、それだけで1000msほど速くなった。それでも1200msほどは違うなぁ。でもstaticパーサにしたら速くなるのはなぜだろう……よく、わからん。