twirlはコンパイルが遅い どれくらい遅いのか測りました
twirlというScalaのテンプレートエンジンがあるのですが、どうやらこれはコンパイルが遅いらしいです。どれくらい遅いのか測ってみました。
プラグインを入れて、以下のファイルを用意してコンパイルします。
@(name: String)
Hello @name!!
sbt clean compileで計測します。
テンプレファイル数 | コンパイル時間 |
0 | 7 sec |
1 | 7 sec |
5 | 8 sec |
10 | 9 sec |
こんな感じになりました。拡張子が.htmlでも時間はほとんど同じでした。
もう少し複雑なテンプレートも試しておきます。
@(pList: Seq[sample.Person])
[ USER LIST ]
@for(p <- pList){
-----------------------
ID : @p.id
NAME : @p.name
AGE : @p.age.getOrElse("なし")
}
@for(p <- pList){
-----------------------
ID : @p.id
NAME : @p.name
AGE : @p.age.getOrElse("なし")
}
@for(p <- pList){
-----------------------
ID : @p.id
NAME : @p.name
AGE : @p.age.getOrElse("なし")
}
@for(p <- pList){
-----------------------
ID : @p.id
NAME : @p.name
AGE : @p.age.getOrElse("なし")
}
@for(p <- pList){
-----------------------
ID : @p.id
NAME : @p.name
AGE : @p.age.getOrElse("なし")
}
@for(p <- pList){
-----------------------
ID : @p.id
NAME : @p.name
AGE : @p.age.getOrElse("なし")
}
@for(p <- pList){
-----------------------
ID : @p.id
NAME : @p.name
AGE : @p.age.getOrElse("なし")
}
こんなにforを繰り返す必要はありませんが・・・実戦的なコードだとこれくらいには行数が増えてくるかと思います。
では試してみます。
テンプレファイル数 | コンパイル時間 |
0 | 7 sec |
1 | 10 sec |
5 | 14 sec |
10 | 16 sec |
そこそこ大きいファイルが沢山あると遅いですね・・・
ちなみに今回はcleanしましたが、cleanしない場合は差分コンパイルになるので、テンプレートを1つも変えなければ速いです。手元で試した感じだと0 secでした。一部のみ変えると9 secとかでした。
結論
- そこそこ大きいテンプレファイル10個で +16 sec (マシンによりますが)
- テンプレを変えない場合はその分のコンパイルは走らない (毎回cleanしたら別ですが)
自分はサーバサイドエンジニアなのですが、半分くらいはフロントのエンジニアもやってます。その立場からすると差分コンパイルありとは言え、テンプレ1個変えてコンパイル+9秒とかかかると厳しい感じありますね。・・・というかフロントとか関係なく、ちょっと修正して+9秒はScalaコンパイルをさらに遅くして微妙ですね。
みなさんも選択は慎重に・・・!ちなみに自分はメール本文のテンプレートとしてのみ利用しています。