ベンチマークも無しに遅いと主張されても論拠が薄いと批判したところ、id:kwatchさんがVelocityとJSP+ELのベンチマークを作ってくれました。ご苦労様です。
なるほど、VelocityよりJSP+ELは遅いと言う事ですね。これで他のテンプレート > Velocity > JSP+ELという実行速度になりそうだという主張が、id:kwatchさんのブログのエントリが公開されて1年近く経って、ようやく成り立ちつつあります。テンプレート・エンジンのTenjinのサイトのベンチマークを引用しているので信憑性はまだ疑われそうですが、他のテンプレート・エンジンを用いたベンチマークを多数用意するのは骨が折れるでしょう。
しかし、EL無しのJSPのベンチマークが他の言語のテンプレート・エンジンと比較して遅いと言うわけでも無さそうです。id:kwatchさんのJSPが遅いという主張は、ELを用いていた場合だという条件をつけないと、なかなか賛成してもらえないでしょうね。
なぜかと言うと、旧態依然のJSPやStrutsタグ、もしくはJSPタグを使う方がまだ人気だからです。また、Tomcat 7でもELを使わないサンプル・コードが依然として配布されています。
id:kwatchさんのコメントへの返事
前のエントリーにコメントをもらったので、こちらで返事をしてみます。
それで、『JSPでELを使う事が当然なら、Javaの文字列に+演算子を使うのも当然と言われても仕方が無い気もします』というのはなぜなんでしょうか。
二つ理由があります。
- JSPを使うならELを使うのが当然というid:kwatchさんの前提が恣意的なものだと指摘するために、分かりやすいように他に恣意的な例をあげた。「連結演算子が遅いから、Javaの文字列操作は遅い」と結論されたら、完全に誤りでないにしろ違和感が沸きませんか?
- 連結演算子はStringBufferよりも1000倍程度遅くなるらしい代表的なボトルネックで、id:kwatchさんが「#つうかさ、「Javaの文字列操作は遅い」とか、Javaに対して失礼だろ。」と宣言している以上、「JSPが遅い理由をid:kwatchさんはまるでわかってないらしい」事を明確に示す部分であるため。
id:kwatchさんのように、ソースコードもベンチマークも明示せず、しかもJSP内でELを用いている事を最初に前提として説明しない状態でJSPは遅いと宣言すれば、Javaの代表的なボトルネックである連結演算子を大量に使った恣意的なコードを実行していると疑われても仕方が無いです。
その疑いに対して上のように書かれていたようなので、多少は皮肉こめて書きました。