2010-03-23 33 views
2

我的應用程序有一個MVC結構。緩存JSP頁面結果的最佳實踐?

只緩存傳遞給JSP視圖的模型對象是否足夠?

或者從緩存JSP視圖渲染結果中獲得顯着的性能提升?

+0

的問題是有點模糊。顯然,緩存的數據無需重新計算,而緩存的數據無效(過時)會浪費空間 - 經典的空間/時間折衷。數據庫查詢比渲染更昂貴嗎?也許,但只有衡量可以肯定地告訴你。 – msw 2010-03-23 04:52:23

+0

除了空間/時間的折衷,通常很難找出緩存數據是否仍然有效。 – Thilo 2010-03-23 05:21:28

回答

1

我不會詳談。假設你知道你在做什麼。

現在來簡單回答你的問題。我們不緩存JSP視圖。作爲一種常規做法,我們會緩存將廣泛使用的查詢的數據庫結果。順便說一下,你打算如何緩存你的JSP視圖?

+0

+1,我有一個全局過濾器,可以看到視圖的結果,所以我可以用它來緩存頁面。我原本以爲只緩存模型就足夠了,但我記得在stackoverflow博客上看到他們通過緩存部分視圖看到了很大的改進。儘管他們使用ASP.NET MVC,但是渲染視圖比渲染JSP更昂貴? – Kyle 2010-03-23 15:03:33

0

這裏的,我會用精神算法:

  1. 你遇到性能問題(換句話說:就是你的網站速度慢)? 如果「否」轉到步驟6
  2. 配置文件的代碼,找到瓶頸(實Profiler工具或只加 定時器將測量每個請求所需要的時間等)
  3. 查找基礎上的瓶頸在步驟2中收集的數據。
  4. 嘗試找到算法解決方案,即以不同的方式計算相同的結果,這需要較少的資源來限制瓶頸。如果您發現這樣的算法實施它並轉到第6步。
  5. 決定緩解此瓶頸的策略。緩存是解決某種問題的方法。在網站中,經常出現放緩是由於下載內容所致。在這種情況下,您可以將所有靜態內容駐留在專用服務器(不同域)中,並讓網頁從靜態網站指定內容。瀏覽器將打開第二個連接到靜態網站,這將顯着提高性能。
  6. 重構代碼以使其可維護,結構良好,不易出錯。
0

我使用的每用戶菜單緩存session範圍:

<c:if test="${empty JSPCACHE_menu}"> 
    <c:set var="JSPCACHE_menu" scope="session"> 
    <ul id="user-menu">...</ul> 
    </c:set> 
</c:if> 
${JSPCACHE_menu} 

隨着application範圍和c:if檢查,你可以在所有用戶之間的緩存值(例如貨幣匯率):

<c:set var="newCurrencyTS" value="currencyService.newCurrencyTS()"/> 
<c:if test="${JSPCACHE_currencyTS.time < newCurrencyTS.time}"> 
    <c:set var="JSPCACHE_currencyWidget" scope="application"> 
    <ul> 
     <c:for var="i" items="${currencyService.getActualRates()}"> 
     <li>...<li> 
     </c:for> 
    </ul> 
    </c:set> 
    <c:set var="JSPCACHE_currencyTS" value="${newCurrencyTS}" scope="application"/> 
</c:if> 
${JSPCACHE_currencyWidget}