2009-09-25 60 views
21

我開始將一個較大的JSP文件拆分爲一些較小的JSP頁面,這樣我就可以在網站的其他區域重複使用它。使用jsp的JSP性能:include

我可以採取離開的方式作爲一個龐大的整體JSP文件,採取PARAMS並相應地調整它的行爲。我可以採取的另一種方法是將其分開,以便通過jsp:include調用它。

創建從服務器內調度的其他請求調用時性能問題是什麼?將它作爲一個jsp頁面保持更好的性能是否明智?

+0

我建議看一下taglibs/etc - 使用jsp進行調試包括一個皇家PITA。 – 2009-09-25 20:43:19

回答

23

jsp:include是一個運行時指令,與<%@ include ... %>指令不同,它恰好是編譯時指令(實際上是轉換時間)。編譯時包含指令相對來說是無害的,因爲JSP通常是針對生產進行預編譯的,或者對於應用程序的每個部署都編譯最糟糕的情況。由於這個原因,對於靜態文件最好使用編譯時指令,因爲這些文件在運行時不會被改變。

另一個頭上的運行時包含指令(如果使用不當)可能會導致某些性能下降,特別是對於包含靜態文件的情況。這主要是因爲JSP容器必須獲取靜態文件的內容並將其包含在響應中。因此,保留使用運行時指令的真正有用的場景,其中另一個servlet或jsp的響應將被包含在響應中,而不僅僅是使代碼看起來很好。

17

您應該使用:

<%@ include file="page.jsp" %> 

這增加了page.jsp的在轉換時的內容並沒有什麼開銷。

<jsp:include page="page.jsp" /> 

您的方法會在運行時添加內容並增加大量開銷。

3

靜態VS動態include

include指令,使得翻譯中所包含的頁面,並將其複製的副本到一個JSP頁面(以下簡稱「包括頁面」)。這被稱爲靜態包括(或翻譯時包括),並使用以下語法:期間運行時

<%@ include file="/jsp/userinfopage.jsp" %> 

jsp:include動作,動態地包括從包括頁面,輸出內包含頁面輸出。這被稱爲動態包括(或運行時包括),並使用以下語法:

<jsp:include page="/jsp/userinfopage.jsp" flush="true" /> 

性能考慮

靜態包括影響頁大小;動態包括影響處理開銷。靜態包括避免動態包含所需的請求調度程序的開銷,但在涉及大型文件的情況下可能會出現問題。

動態包含會增加處理開銷,並且需要額外調用請求調度程序。

http://docs.oracle.com/cd/A97336_01/buslog.102/a83726/keydev1.htm#1015959 http://docs.oracle.com/cd/A97336_01/buslog.102/a83726/genlovw3.htm

-1

不應該創建一個場景加載大量數據在時間的UI,這將影響任何方式你實現JSP的性能。把事情簡單化。瞭解,在特定情況下用戶可能讀取多少數據。保持用戶界面友好,業務和技術友好。

計算許多靜態/動態內容在那裏,使用包括它的上下文。如果要顯示記錄,請使用10-50條記錄的分頁。更好地使用任何框架來解決基本問題,而不是從頭開始處理它。

,如果你不需要任何JSP使用會話S使其作爲會議虛假 <%@網頁會議=「假」%>

對於include指令,JSP引擎增加的內容在翻譯階段插入的頁面,所以它不會影響性能。 對於include操作,JSP引擎會在運行時添加插入頁面的內容,這會增加額外開銷。