원래 PrimeFaces 포럼 @ http://forum.primefaces.org/viewtopic.php?f=3&t=29546에 게시 됨
최근에, 나는 앱의 성능을 평가하고, JPA 쿼리를 튜닝하고, 동적 SQL 쿼리를 명명 된 쿼리로 대체하고, 오늘 아침에 getter 메소드가 Java Visual VM에서 HOT SPOT보다 더 많은 것을 인식했습니다. 내 코드 (또는 대부분의 코드).
게터 방법 :
PageNavigationController.getGmapsAutoComplete()
index.xhtml의 ui : include에 의해 참조 됨
아래에서 PageNavigationController.getGmapsAutoComplete ()가 Java Visual VM의 HOT SPOT (성능 문제)임을 알 수 있습니다. 자세히 살펴보면, 화면 캡처에서 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'메소드에 코드를 추가하지 말라고 권고했기 때문에이 주제를 공유했습니다. :)