最初に PrimeFaces フォーラム @ http://forum.primefaces.org/viewtopic.php?f=3&t=29546に投稿されました
最近、私は自分のアプリのパフォーマンスを評価し、JPA クエリを調整し、動的 SQL クエリを名前付きクエリに置き換えることに夢中になっています。私のコード(または私のコードの大部分)。
ゲッターメソッド:
PageNavigationController.getGmapsAutoComplete()
index.xhtml の ui:include で参照
以下では、PageNavigationController.getGmapsAutoComplete() が Java Visual VM のホット スポット (パフォーマンスの問題) であることがわかります。さらに下のスクリーン キャプチャを見ると、PrimeFaces の遅延データ テーブル ゲッター メソッドである getLazyModel() もホット スポットであることがわかります。これは、エンドユーザーが多くの「遅延データ テーブル」タイプの処理/操作/タスクを実行している場合に限られます。アプリで。:)

以下の(元の)コードを参照してください。
public Boolean getGmapsAutoComplete() {
switch (page) {
case "/orders/pf_Add.xhtml":
case "/orders/pf_Edit.xhtml":
case "/orders/pf_EditDriverVehicles.xhtml":
gmapsAutoComplete = true;
break;
default:
gmapsAutoComplete = false;
break;
}
return gmapsAutoComplete;
}
index.xhtml で次のように参照されます。
<h:head>
<ui:include src="#{pageNavigationController.gmapsAutoComplete ? '/head_gmapsAutoComplete.xhtml' : (pageNavigationController.gmaps ? '/head_gmaps.xhtml' : '/head_default.xhtml')}"/>
</h:head>
解決策: これは「getter」メソッドであるため、メソッドが呼び出される前に、コードを移動して gmapsAutoComplete に値を割り当てます。以下のコードを参照してください。
/*
* 2013-04-06 moved switch {...} to updateGmapsAutoComplete()
* because performance = 115ms (hot spot) while
* navigating through web app
*/
public Boolean getGmapsAutoComplete() {
return gmapsAutoComplete;
}
/*
* ALWAYS call this method after "page = ..."
*/
private void updateGmapsAutoComplete() {
switch (page) {
case "/orders/pf_Add.xhtml":
case "/orders/pf_Edit.xhtml":
case "/orders/pf_EditDriverVehicles.xhtml":
gmapsAutoComplete = true;
break;
default:
gmapsAutoComplete = false;
break;
}
}
テスト結果: PageNavigationController.getGmapsAutoComplete() はもはや Java Visual VM の HOT SPOT ではありません (もう表示されません)。
多くの専門家ユーザーがジュニア JSF 開発者に「getter」メソッドにコードを追加しないようにアドバイスしているため、このトピックを共有します。:)