2013-04-11 25 views
3

我們有一個頁面,其中主要內容區域由ui:includes控制,基本上我們有一個h:panelGrouprendered條件和ui:include它的內部。緩慢與多個用戶界面:包括

像這樣:

<h:panelGroup rendered="#{bean.page.id eq bean.page1ID}"> 
     <ui:include src="page.xhtml"/> 
</h:panelGroup> 

我們對那些10。每個頁面都非常複雜,有幾個自己的豆子。我們這樣做的原因,而不是動態ui:include是因爲有一個錯誤,其中ui:include以外使用的@ViewScoped豆在ui:include內部重新實例化,從而導致各種問題。

任何時候我們執行一些操作都需要幾秒鐘的時間(通常是7到15)來執行操作。例如,當我們更改bean.page屬性並請求渲染時。即使我們做一些簡單的事情,比如保存一個幾乎不涉及其他任何東西的價值,它也是非常緩慢的。如果我刪除所有h:panelGroupsui:includes(除了一個),那麼該網站非常快(1到2秒響應)。據我所知,ui:includes中的所有頁面和它們使用的bean都得到了實例化。

我們可以做些什麼來加快速度?我們在樹脂4.0.32和primefaces 3.5上使用mojarra 2.1.13。

謝謝。

+0

我建議你使用[自定義facelet標籤](http://www.mkyong.com/jsf2/custom-tags-in-jsf-2-0/)而不是''。使用JSF邏輯包含整個頁面可能會帶來問題,因爲它們在構建頁面時包含在內,而不是在呈現時包含。 [看看我用'@ ViewScoped' bean遇到的問題](http://stackoverflow.com/questions/14518133/primefaces-multiple-dynamic-content-panels-to-be-displayed)。 – 2013-04-12 17:12:07

+0

我有同樣的問題,這就是爲什麼我去'h:panelGroup'和'rendered'而不是動態的'ui:include'。我必須查看自定義facelet標籤。 – casolorz 2013-04-16 13:20:00

回答

1

您是否有任何自定義上下文參數?錯誤的值會顯着影響性能。

你可以嘗試禁用被Facelets在你web.xml刷新:

<context-param> 
    <param-name>facelets.REFRESH_PERIOD</param-name> 
    <param-value>-1</param-value> 
</context-param> 

這個值設置爲-1禁用視圖申報更改內部檢查。這意味着您無法重新加載xhtml頁面而無需重新部署,但這也意味着更高的性能。

或者,您也可以嘗試將項目階段設置爲Production(這應該包括其他參數)。這將禁用許多額外的檢查和東西發展:

<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Production</param-value> 
</context-param> 

這兩個設置應該始終可以在生產環境中使用。