餡子付゛録゛

ソフトウェア開発ツールの便利な使い方を紹介。

あるPHPer/RubiestのJSPに対するちょっとした誤解

JSPが遅い理由をJava屋さんはまるでわかってないらしい」と言う、JSPを全く理解していないPHPer/Rubiestを発見してしまいました。分かっていないのは、ここの部分。

VeocityやJSPが遅いのは、単に動的な独自言語を導入したから。

Veocityはともかく、JSPは動的な独自言語とは言え無いです。

    • J2EEで定義されるJavaの正式な規格であり、独自ではない。
    • JSPは、一度Javaソースコードに変換され、そこからクラスに変換され、最後にインスタンスがメモリー上に常駐するので、動的な言語ではない。

%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の印象は、この複雑な仕組みで悪いのかも知れませんね。