81.参考: 性能チューニング

概要

Struts2のドキュメントの中には、性能のチューニングについての記事があります。

この記事をTips的に見ていこうと思います。

(例によってGoogle翻訳ですので間違いがありましたらすみません)

チューニングについて触れたいのは、後ですべてのプログラムやJSPファイルの記述を直すのが大変だからです。

最初にある程度把握してから設計・開発に入りたいものですものね。

重要なOGNLのアップデート

Struts2の2.3.1より以前のバージョンに対する情報です・

OGNL3.0.3は、OGNLの以前のバージョンに対しても互換性があり、しかも、かなりパフォーマンスが改善されています。

より詳細な情報は、こちらを見てください。

https://issues.apache.org/jira/browse/WW-3580

logging と devModeをoffにしましょう

devModeは、Struts2の設定ファイルやvalidationのファイルをリロードしてくれます。

しかし、リクエストの度にリロードがされるのでパフォーマンスを下げます。

constantの設定でdevModeをfalseにしましょう。 (こちらを参照)

ログについては、不要なログを出力をしないように設定しましょう(log4jの設定ファイルなど)。ログの設定については、こちらも参照してみてください。

特にFreemarker はたくさんのログを出力します。

また、ログレベルを確かめてからログ出力をするように実装してください。

Java Templatesを使うことを検討しましょう

もし、themeをsimpleしか使わず、しかもFreeMarkerのthemeの継承(上書き)をしない場合、java templatesを使用することを検討してみましょう。

ほとんど機能は互換性があり、性能も速いです。

不要なInterceptorを除去しましょう

例えば、I18nInterceptor は使用しないこともあると思います。

このInterceptorは、セッションを作るため少し処理が入ります。

不要なInterceptorの除去方法は以下を参照ください。

04.Spring-Struts2の実際の利用サンプル(設定ファイルによる構築)

80.参考: struts.xmlのconstantの設定値一覧

Ajax theme やCalendar タグを使用するときは、Struts2のjarから静的コンテンツをコピーしましょう

静的コンテンツとはStruts2のjarの中に入っている、.jsや.cssのファイルを指しています。

Struts2では設定ファイルで設定することで、jarの中のファイルをリクエストすることができます。

Struts2が特殊なURLのパス:"/struts" を指定するとフィルタがjar内の静的ファイルを返すようになっています。

しかし、サーブレットなどがこれらの処理を最適化できないのでパフォーマンスに影響があります。

jarの中身をコピーしてApacheの静的コンテンツを扱う場所に置くなど、別のWEBサーバにコピーした方がパフォーマンスは上がります。

freemarker.properties を作って、WEB-INF/classes配下に置きましょう

FreeMarkerはデフォルトで500ミリ秒毎にthemeのファイルを見に行きます。

この時間間隔を長くすることでパフォーマンスが向上するかもしれません。

参考: Freemarker configuration properties

【freemarker.propertiesの記述例】

template_update_delay=60000

Freemarker templateのキャッシュをonにしましょう

Struts 2.0.10の時点では、 Struts2の設定ファイルのconstantタグで、 struts.freemarker.templatesCacheをtrueにするとテンプレートの

キャッシュをします。デフォルトはfalseです。

注意点としては、FreeMarkerは、jarの中にあるクラスパスにあるテンプレートファイルのキャッシュは失敗するということです。

FreeMarkerのキャッシュは、ファイルの更新日を見て行うのですが、クラスパス内のファイルには更新日がないために毎回リロードしてしまうのです。

ですのWEB_APP のルートにファイルをコピーしなければなりません。

⇒すみません。試していないので本当かどうかはわかりません。

themeを継承するときは、必要なtemplateをすべてコピーしましょう

themeの継承の機構を使用すると、templateファイルが見つからないときに、親のthemeを探しに行きます。

これが多少のパフォーマンスの劣化をもたらします。

これを改善するには、必要なtemplateファイルをすべて自分のthemeのフォルダにコピーしておきます。

⇒themeの継承についてはこちらを参照

JSPのStruts2タグよりもFreeMarkerで用意されているものを使用しましょう

FreeMarkerを使用する場合は、Struts2で用意されているタグよりも、FreeMarkerで用意されている同じような機能の方が少しだけパフォーマンスがよいです。

例えば、<s:property value="foo"/> は ${foo}で置き換えた方がよいでしょう。

Created Date: 2012/02/18