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パーサにしたら速くなるのはなぜだろう……よく、わからん。