パフォーマンスチューニング(翻訳)

Struts2の本家にある『Apache Struts 2 Documentation - Performance Tuning』を翻訳してみました。




logging と devModeを無効にしてください。

DevModeでは、設定のリロードと関連ファイルの検査を行うことができます。しかし、これらはリクエストごとに実施されるため、DevModeを有効にすると全体的なパフォーマンスが犠牲になるでしょう。

またloggingを利用するときには、不要なloggingを必ず無効にしてください(特に Freemarkerは大量のログを出力する)。そして、ログレベルが設定されているかを確認してください。そうしなければ、文字列の解析や結合の処理コストがかかります。

不要なインターセプターは使わないでください。

もしActionにフルスタックのインターセプター一式が不要なら、別のインターセプター(basicStack)を使用してください。もしくは、不要なインターセプターを削除してください。

適切なHTTPヘッダーを利用してください(Cache-Control と Expires)

HTMLビューには、必ず適切なHTTPヘッダーを追加してください。これによりWebブラウザが、HTMLビューをキャッシュできるようになります。

Ajaxテーマ(Dojo) もしくは カレンダータグを利用するときには、Struts2のjarから静的コンテンツをコピーしてください。

Struts2は、特定のテーマやタグに、外部JavaScriptライブラリとCSSを利用しています。デフォルトではこれらのリソースはStruts2.jarに配置されており、特別なパス(/Struts)をリクエストされたときに、特別なFilterがこれらを返します。Struts2は、これらのリクエストを処理することができますが、アプリケーションサーバサーブレットコンテナは、これら静的コンテンツのリクエストのために最適化されていません。これらの.jsと.cssファイルを別サーバ(Lightped,Apache Httpdなど)に移動することを検討してください。

freemarker.propertiesファイルをWEB-INF/classesディレクトリに作成してください。

freemarker.propertiesファイルを作成して、以下の設定を追加してください(もしくは、適切な設定を追加してもかまいません)。

template_update_delay=60000

この値は、Freemarkerが、テンプレートをリロードする必要があるかをチェックする頻度を決定します。デフォルト値は、500msです。テンプレートをリロードする必要があるかどうかをチェックする必要がないため、非常に大きな値を設定しておくのがベストです。
※この値は秒であることに注意してください。freemarkerはこの値をミリ秒に変換します。

参考: Freemarker configuration properties

Struts2.jarから/templateディレクトリをWEB_APPルートにコピーしてください。

Freemakerは、クラスパスからテンプレートを取得する際に、テンプレートを適切にキャッシュできません。これらのテンプレートをWEB_APPルートにコピーしておくことで、Freemarkerはそれらを正しくキャッシュすることができます。Freemarkerはテンプレートをリロードする必要があるかを、テンプレートの最終更新時間で判断します。クラスパスから取得したリソースは、最終更新時間がありません。そのため、Freemarkerは全リクエストでテンプレートをリロードしてしまうのです。

テーマをオーバライドするときには、該当するテーマのディレクトリに必要なテンプレートをすべてコピーしてください。

テンプレートがカレントディレクトリで見つからない場合には、パフォーマンスコストがかかります。なぜならStruts2では、親テーマに戻る前に、最初に現在のテーマでテンプレートをチェックしなければならないためです。将来的には、この欠点は解消される予定です。

必要がない場合にはSessionを生成しないでください。

Struts2は、指定がなければSessionを生成しません(例えば、createSession interceptorを指定するとSessionを生成します)。
SiteMeshを利用する場合には、常にSessionが生成される点に注意してください。
詳細:http://forums.opensymphony.com/thread.jspa?messageID=5688

Freemarkerを利用する際には、JSPタグではなくFreemarkerの同等表現を使ってください。

Freemarkerは繰り返しリスト、プロパティ表示、他テンプレートのインクルード、マクロなど、をサポートしています。Freemarkerの同等の表現ではなく、JSPのSタグを使うと多少の処理コストが発生します。
例えば、 よりも、${foo}を利用すべきです。



原文:「Apache Struts 2 Documentation - Performance Tuning」