Thymeleaf3は2より3倍速く、JDK9では3割遅くなる

Thymeleaf3がどのくらい2より速くなってるか、あとJDK9のcompact stringは有利に働くかどうか、ベンチマークを取ってみました。
結果として、Thymeleaf3は2より3倍速く、JDK9では遅くなっていて、compact stringは関係なさそうという感じ。
あと、Pebble速い。(というかThymeleaf遅い)


まとめると、こう。単位はops/sで、大きいほど良い。

Thymeleaf cache on no cache
3.0.2 on JDK1.8 16378.948 376.295
3.0.2 on JDK9 11239.364 404.544
2.1.5 on JDK1.8 4621.328 1690.995
2.1.5 on JDK9 4185.943 1505.521
Pebble on JDK1.8 86571.846
Pebble on JDK9 79746.853

キャッシュなしだとThymeleaf2のほうが速いというのも面白い。
ついでにPebbleも試したけど、いずれにせよThymeleaf遅いな。


JDK1.8の設定はこんな感じ

# VM version: JDK 1.8.0_112, VM 25.112-b15
# VM options: <none>

JDK9の設定はこんな感じ

# VM version: JDK 9.0.1, VM 9.0.1+11
# VM options: <none>


compact stringをはずしてみたらこんな感じ

Thymeleaf cache on no cache
3.0.2 on JDK9 cs 11239.364 404.544
3.0.2 on JDK9 no-cs 11502.128 383.660
2.1.5 on JDK9 cs 4185.943 1505.521
2.1.5 on JDK9 no-cs 4175.685 1541.948
Pebble on JDK9 cs 79746.853
pebble on JDK9 no-cs 87707.230

Thymeleafは差はなさそう。Pebbleはcompact string外した方が速くなってる。


no-csがcompact stringなしで、VMオプションはこんな感じ。

# VM version: JDK 9.0.1, VM 9.0.1+11
# VM options: -XX:-CompactStrings


ついでに、パラメータが英語だけの場合も試してみたけど、compact stringの効果はなさそう。en付のデータ。

Thymeleaf cache on
3.0.2 on JDK9 cs en 12934.452
3.0.2 on JDK9 no-cs en 12877.672
2.1.5 on JDK9 cs en 4286.138
2.1.5 on JDK9 no-cs en 4287.446
Pebble on JDK9 cs en 83942.007
Pebble on JDK9 no-cs en 92066.631


あと、テンプレートキャッシュが効かないと劇的に重いので、サーバーレスでやろうとするならテンプレートもプレコンパイルの仕組みが必要そう。


ソースはこちら
https://github.com/kishida/thymeleaf-bench