「JSPが遅い理由をJava屋さんはまるでわかってないらしい」と言う、JSPを全く理解していないPHPer/Rubiestを発見してしまいました。分かっていないのは、ここの部分。
VeocityやJSPが遅いのは、単に動的な独自言語を導入したから。
Veocityはともかく、JSPは動的な独自言語とは言え無いです。
%CATALINA_HOME%を典型的なJavaアプリケーションサーバーのTomcatのインストール先、%APP1%を作成アプリケーション名として、JSPファイルを作成してみましょう。
%CATALINA_HOME%/webapps/%APP1%/index.jsp
JSPファイルの初回アクセス時に、index.jspは、index_jsp.javaと言うJavaソースコードに変換される。
%CATALINA_HOME%/work/Catalina/localhost/%APP1%/org/apache/jsp/index_jsp.java
次に、index_jspはindex_jsp.classにコンパイルされます。
%CATALINA_HOME%/work/Catalina/localhost/%APP1%/work/org/apache/jsp/index_jsp.class
最後に、このclassがJVMによってロードされ、index_jsp.classのインスタンスがずっとメモリー上に残ります。
初回アクセスは上述のような複雑な処理になるので、─ 事前コンパイルもできますが ─ JSPの応答はかなり遅くなります。2回目以降のアクセスは、クラス・ロードもインスタンス作成も省略できるので、PHP等のスクリプト言語よりも高速になります。
最近の計算機は高速なので、初回アクセスのオーバーヘッドも、ほとんど気付かないレベルになりましたが、10年以上前にJSPを触ったPHPerの印象は、この複雑な仕組みで悪いのかも知れませんね。