七個有效方法優化JSP速度?

Tags: 速度,

調整JSP和servlet的一些非常實用的方法,它可使你的servlet和JSP頁面響應更快,擴充套件性更強。而且在使用者數增加的情況下,系 統負載會呈現出平滑上長的趨勢。在本文中,我將通過一些實際例子和配置方法使得你的應用程式的效能有出人意料的提升。其中,某些調優技術是在你的程式設計工作 中實現的。而另一些技術是與應用伺服器的配置相關的。

方法/步驟

在servlet的init()方法中快取資料

當應用伺服器初始化servlet例項之後,為客戶端請求提供服務之前,它會呼叫這個servlet的init()方法。在一個servlet 的生命週期中,init()方法只會被呼叫一次。通過在init()方法中快取一些靜態的資料或完成一些只需要執行一次的、耗時的操作,就可大大地提高系統性能。

禁止servlet和JSP 自動過載(auto-reloading)

Servlet/JSP提供了一個實用的技術,即自動過載技術,它為開發人員提供了一個好的開發環境,當你改變servlet和JSP頁面後而 不必重啟應用伺服器。然而,這種技術在產品執行階段對系統的資源是一個極大的損耗,因為它會給JSP引擎的類裝載器(classloader)帶來極大的 負擔。因此關閉自動過載功能對系統性能的提升是一個極大的幫助。

不要濫用HttpSession

在很多應用中,我們的程式需要保持客戶端的狀態,以便頁面之間可以相互聯絡。但不幸的是由於HTTP具有天生無狀態性,從而無法儲存客戶端的狀 態。因此一般的應用伺服器都提供了session來儲存客戶的狀態。在JSP應用伺服器中,是通過HttpSession對像來實現session的功能 的,但在方便的同時,它也給系統帶來了不小的負擔。因為每當你獲得或更新session時,系統者要對它進行費時的序列化操作。

將頁面輸出進行壓縮

壓縮是解決資料冗餘的一個好的方法,特別是在網路頻寬不夠發達的今天。有的瀏覽器支援gzip(GNU zip)進行來對HTML檔案進行壓縮,這種方法可以戲劇性地減少HTML檔案的下載時間。

因此,如果你將servlet或JSP頁面生成的HTML頁面進行壓縮的話,那使用者就會覺得頁面瀏覽速度會非常快。但不幸的是,不是所有的瀏覽器都支援gzip壓縮,但你可以通過在你的程式中檢查客戶的瀏覽器是否支援它。

使用執行緒池

應用伺服器預設地為每個不同的客戶端請求建立一個執行緒進行處理,併為它們分派service()方法,當service()方法呼叫完成後,與 之相應的執行緒也隨之撤消。由於建立和撤消執行緒會耗費一定的系統資源,這種預設模式降低了系統的效能。但所幸的是我們可以通過建立一個執行緒池來改變這種狀 況。

另外,我們還要為這個執行緒池設定一個最小執行緒數和一個最大執行緒數。在應用伺服器啟動時,它會建立數量等於最小執行緒數的一個執行緒池,當客戶有請求 時,相應地從池從取出一個執行緒來進行處理,當處理完成後,再將執行緒重新放入到池中。如果池中的執行緒不夠地話,系統會自動地增加池中執行緒的數量,但總量不能 超過最大執行緒數。通過使用執行緒池,當客戶端請求急劇增加時,系統的負載就會呈現的平滑的上升曲線,從而提高的系統的可伸縮性。

選擇正確的頁面包含機制

在JSP中有兩種方法可以用來包含另一個頁面

1、使用include指示符(<%@ includee file=”test.jsp” %>)。

2、使用jsp指示符(<jsp:includee page=”test.jsp” flush=”true”/>)。

在實際中我發現,如果使用第一種方法的話,可以使得系統性能更高。

方法 7:正確地確定javabean的生命週期

JSP的一個強大的地方就是對javabean的支援。通過在JSP頁面中使用<jsp:useBean>標籤,可以將javabean直接插入到一個JSP頁面中。它的使用方法如下:

1. <jsp:useBean id=“name”

2. scope=“page request session application”

3. class= “package.className”

4. type=“typeName”></jsp:useBean>

其中scope屬性指出了這個bean的生命週期。預設的生命週期為page。如果你沒有正確地選擇bean的生命週期的話,它將影響系統的效能。

相關問題答案