もともとPrimeFacesフォーラムに投稿されました@ http://forum.primefaces.org/viewtopic.php?f=3&t=29546
最近、アプリのパフォーマンスの評価、JPAクエリのチューニング、動的SQLクエリの名前付きクエリへの置き換えに夢中になっており、今朝、ゲッターメソッドがJava Visual VMの他の部分よりもホットスポットであることを認識しました私のコード(または私のコードの大部分)。
ゲッターメソッド:
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のホットスポットではなくなりました(表示されなくなりました)。
多くのエキスパートユーザーがジュニアJSF開発者に「getter」メソッドにコードを追加しないようにアドバイスしているため、このトピックを共有します。:)