0

Glassfish サーバーで実行されている Web ページがあります。私たちのjspファイルには、以下のようなインクルードがたくさんあります。

<jsp:directive.include file="johndoe/foobar.jspf"/>

これらのファイルは、ユーザーの選択に従って含まれています。jsp ファイルは基本的に次のようになります。

<jsp:root version="2.1" xmlns:c="http://java.sun.com/jstl/core_rt"
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:jsp="http://java.sun.com/JSP/Page" 
xmlns:webuijsf="http://www.sun.com/webui/webuijsf">
//some unimportant codes here
<c:if test="${sessionScope.loadAvgTest}">
  //some unimportant codes here
  <f:subview id="reports15">
    <jsp:directive.include file="siforms/sysinfoform.jspf"/>
  </f:subview>
  //some unimportant codes here                                        
  <f:subview id="reports16">
    <jsp:directive.include file="siforms/sysinfoformscheduled.jspf"/>
  </f:subview>
   //some unimportant codes here
</c:if>
//some unimportant codes here
<c:if test="${sessionScope.bandwidthTest}">
  //some unimportant codes here
  <f:subview id="reports17">
    <jsp:directive.include file="mailforms/mailfilter.jspf"/>
  </f:subview>
  //some unimportant codes here
  <f:subview id="reports18">
    <jsp:directive.include file="mailforms/mailfilterscheduled.jspf"/>
  </f:subview>
//some unimportant codes here
</c:if>
....

このような if ステートメントは、それぞれ 2 つの inculdes を含む約 80 あります。これらの if 句の多くを削除し、少数の if といくつかの include メモリ使用量のみを残したとき、問題はありませんでした。しかし、より多くの if 句を使用すると、メモリ使用量が増加します。コードを最適化する方法や、サーブレット構成に構成変更を加えてメモリ使用量を削減する方法はありますか?

4

2 に答える 2

1

問題を解決するjsp:include代わりに使用する。jsp:directive.include私の調査から学んだ限りjsp:directive.include(includeディレクティブ)は、コンパイル時にファイルをJSPページにjsp:include含めますが、実行時に出力を含めます。

I have found that, include action (runtime include) runs a bit slower 
yet it is preferred generally because it save a lot of memory of the system. 

ソース

于 2011-09-19T13:11:32.897 に答える
0

JSFを使用しています。ビューの作成時に、ifステートメントが true と評価された場合、ページ上の JSF コントロールがコンポーネント ツリーに追加されます。サーバー側の状態保存の場合、これらのUIComponentインスタンスとその状態は (デフォルトで) ユーザーのセッションで永続化されます。コントロールを追加すればするほど、消費するメモリが増えます。デフォルトでは、多くの古いビューがセッションに保持されます。

あなたは試すことができます:

  • ラージ オブジェクト グラフを作成しない
  • セッション内のビューの数を減らす (実装のcom.sun.faces.numberOfViewsInSessionおよびcom.sun.faces.numberOfLogicalViewsまたは同等の初期化パラメーターを参照)
  • まだ使用していない場合は、部分的な状態を保存する JSF バージョンを使用します (Glassfish のアップグレードが必要になる場合があります)。
  • StateManagerを実装して状態を RAM から保存する (たとえば、データベースに保存しますが、これはそれ自体の問題につながります) か、デフォルトの実装でクライアント側の状態保存に切り替える (参照javax.faces.STATE_SAVING_METHOD- これにはセキュリティ上の懸念が伴い、アプリケーションの動作が変わる可能性があります)。
于 2011-09-17T08:59:57.747 に答える