アプリ版:「スタンプのみでお礼する」機能のリリースについて

サーブレット・jspを使い、View部分を表示するのと
テンプレートファイルとしてhtmlファイルを読み込み、変数展開(置換処理)「StringBufferをnewして」するのでは、どちらがよろしいのでしょうか?

サンプルとして、先輩から頂いた、ソースコード(プログラム設計)が、上記の後者の方でして、サーブレット技術を書籍等で勉強した私にとって(前者)、どちらが良いのか悩んでしまいました。

Webデザイナさんにとっては、taglibを使うよりも、簡単な($NAME$のような記述)変数置換の方がいいのかなとも思いました。
※ちなみに、プログラムの可読性はあまり良いとはいえません。

(TomcatとApacheをコネクトした場合)htmlを動的に生成した際の処理スピード(パフォーマンス)、Velocity等を使った場合などもあわせて、jspを使うメリット・デメリット等を教えて頂けたら、後の参考にしたいとおもいますので、ご教授いただけたらと思います。

A 回答 (4件)

JSPを使うのでしたら、Includeそのものがテンプレートを使用するのと同じ役割を成せますよね



magicjournyさんが補足で付けている文章を読む限り、JSPで開発を進めているみたいですね。
それでしたら、HTMLファイルなり、JSPファイルなりをincludeでテンプレートファイルとして使用すれば良いのではないでしょうか?^^
つまり、MVCモデルになりますね(笑

ココからはServletとJSPの速度の比較について書かせて頂きますが、ServletとJSPは、一見コンパイルを済ませるServletの方が処理が早いと思いがちですが、それはサーバにJSPファイルがキャッシュされていない時のみです。
TomcatでJSPを動かす際、閲覧要求があると同時にJSPファイルを一旦Servletソースに書き換えてコンパイルするという処理をサーバ側で行うのです。
一番最初にページを閲覧する人にとっては、待機時間がありますが、二度目以降、サーバ側にJSPがキャッシュが残っている限りは、コンパイル済みのデータを使用して処理してクライアント側に送信するので、サーバにキャッシュさえされていれば、Servletと処理速度が理論上は変わらない事になります。

Velocityの処理の事も含めて、参考URLを貼り付けて置きます。

参考URL:http://www.jajakarta.org/velocity/velocity-1.2/d …
    • good
    • 0
この回答へのお礼

coral0さん、ありがとうございます。

改めてよりいっそう理解が深まりました。

VelocityのURLは、とても参考になりそうです。
※書き込み内容の「一番最初にページを閲覧する人」っていうのは、プログラマーの自分になりそうですね。(笑

お礼日時:2004/06/23 06:32

>※私も考えたのですが、htmlの「変数置換」方式だと、ファイル自体をReadしないといけないので、その分パフォーマンスが落ちるということでよろしいでしょうか?



たとえば、片方はソースに書いて表示するのみ、片方は置換を行って表示するとして、これらの機能は違うものです。テンプレートの置換をすることが一つの利用者への機能、サービスであり、その機能を載せているものと載せていないものを比較してパフォーマンスが落ちるとは私個人は表現しません。必要でないなら載せなければ速度は出るのが当然です。要は必要な機能をいかに早く処理させるかという事でパフォーマンスというのではないでしょうか?

その点からも、ファイルの読み込み方、変数の使い方に注意するといいのではないでしょうか?

たとえば読み込みに関してはBufferを使用する。
他には一気に変数へファイルの内容を詰め込むのではなく、一行ずつ読み込み変換していく。また、その時の変数はループの外で宣言をしループ内で使いまわしをしていくなど。

それで、使用に耐えられない速度であるならば別の方法を選択するしかないでしょう。
    • good
    • 0
この回答へのお礼

gantsu-teacherさん、ありがとうございます。

>たとえば、片方はソースに書いて表示するのみ、片方は置換を行って表示するとして、これらの機能は違うものです。テンプレートの置換をすることが一つの利用者への機能、サービスであり、その機能を載せているものと載せていないものを比較してパフォーマンスが落ちるとは私個人は表現しません。必要でないなら載せなければ速度は出るのが当然です。要は必要な機能をいかに早く処理させるかという事でパフォーマンスというのではないでしょうか?

なるほどと思います。
確かに、プログラミングの書き方(パターン?)によって、違うものだと認識しました。

お礼日時:2004/06/28 06:31

ユーザビリティ(?)を上げる目的であるならば、簡単な変数置換にしてあげるほうがいいかも知れないですね。

taglibは属性を使用しなければならなくなった時に再考すればいいかと思います。
それで、includeですが、JSP:includeと@includeですが、動きが少し違います。
JSP:includeは昔の仕様では一部のhtml拡張子などのファイルしか読み込めません。それと、includeされたソースに対してサーブレットの解析は行われません。
一方@includeについてはJSPの一部として読み込んだ後にサーブレットの解析が行われます。

スピードでいうならば更新されるまでリコンパイルがされないことから@includeではないでしょうか?

それからVelocityはかなり良いです。
XMLテンプレートパーサとして使用しましたが非常に高性能でした。難点は新たに言語を覚えなければいけないところでしょうか(^^;
    • good
    • 0
この回答へのお礼

gantsu-teacherさん、ありがとうございました。

私も、Velocityには、先日雑誌で読んだときに、興味を持っていまして、「比較的学習しやすい」と載っていたので、これから勉強しようとおもいます。

※私も考えたのですが、htmlの「変数置換」方式だと、ファイル自体をReadしないといけないので、その分パフォーマンスが落ちるということでよろしいでしょうか?

お礼日時:2004/06/23 06:45

私もmagicjournyさんと同じ事を思ったことがあります。



Servlet・JSP内でHTML表示部分を作成すると、確かに処理は早いので、テンプレートとしてHTMLファイルを読み込むよりも良い様にも思えます。

しかし、もしホームページの外見を変更と言う事態になった際、前者のServlet・JSP内でHTML処理をしていると、全てのソースファイルを修正しなければならなくなるので修正が困難ですが、後者のテンプレートを使用する方法だと、テンプレートファイルである程度の外見を決めているので、テンプレートHTMLファイルを修正するだけで修正が済むので、非常に修正が簡単になり、他にも後者の利点として、再コンパイルをしなくても良いと言うことが挙げられます。

処理速度面から見ると、前者のServlet・JSPでHTML表示部分を作成する方が処理が早いですが、汎用性面を見ると、後者のテンプレート方式が後々修正が楽なので、複雑なページを作らない限りは、こちらの方式を用いる方が良いと思いますよ^^

この回答への補足

質問した後に、気付いたのですが、テンプレート式の場合だと、<jsp:include>が使えないのでは?と思いました。

回答内での「複雑なページ」というのは、<jsp:include>
のような処理という認識でよろしいでしょうか?

※補足ですが、htmlソースのテンプレート式だと、if文等の記述が書けないので、半強制的にMVCモデルらしいということになりますでしょうか?

補足日時:2004/06/19 12:15
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
丁寧なご回答で大変参考になりました。

お礼日時:2004/06/19 12:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!