2010-07-10 37 views
1

我開始使用memcache和app引擎(java)。我有一個頁面,可以緩存從數據存儲中獲取的結果。例如:簡單頁面的基本緩存策略?

// index.jsp 
<% 
List<Horse> horses = datastore.getHorses(PMF.get()); 

for (Horse it : horses) { 
    %> 
    <div><%= it.getName() %></div> 
    <% 
} 
%> 

我可以把馬列表放到memcache中,但是隻是緩存整個頁面內容會更有意義嗎?我的意思是下一次用戶想要加載這個頁面,只是將儲存在緩存中的整個html內容作爲一個字符串吐出來?想知道這是可能的還是一個好的做法。我不確定我會怎麼做,因爲我需要創建一個所有html內容的大量字符串,然後在jsp中打印()它,並將其存儲在memcache中,如下所示:

// index.jsp 
<% 
List<Horse> horses = datastore.getHorses(PMF.get()); 

StringBuilder sb = new StringBuilder(); 
for (Horse it : horses) { 
    sb.append("<div>"); 
    sb.append(it.getName()); 
    sb.append("</div>"); 
} 

// Render contents. 
<%= sb.toString() %> 

// Also can store it in memcache for future requests. 
memCache.put("test/index.jsp", sb.toString()); 
%> 

感謝

+0

http://stackoverflow.com/questions/3217645/caching-contents-of-a-page爲什麼你發佈兩個基本相同的問題?另一個問題最初只用'jsp'和'servlet'標記。只需編輯問題以將這些標籤添加到當前問題中,就可以獲得更廣泛的受衆羣體(這裏的用戶主要是通過標籤瀏覽)。 – BalusC 2010-07-10 04:07:31

+0

我想這個問題不是應用程序引擎特定的 - 更多 - 我如何將我的jsp頁面的全部內容轉換爲字符串?我是否必須使用StringBuilder方法手動執行此操作,或者是否有辦法在文檔末尾抓取所有推送到PrintWriter中的內容來執行此操作? – user246114 2010-07-10 04:15:33

+0

我已經在其他問題中回答了。 – BalusC 2010-07-10 04:36:00

回答

0

如果你不需要爲別的馬列表,你的網頁是不是用戶特定的,那麼它應該是更快地只是緩存整個頁面。否則,緩存馬名單。

緩存馬列表將需要序列化和反序列化列表。這也可能會緩存您不關心的信息(即,未在您的網頁上使用的信息)。另一方面,您的HTML頁面只是文本,因此序列化/反序列化幾乎是不可操作的。

+0

是的,我贊成緩存的HTML。是否必須使用StringBuilder方法重寫整個頁面,或者我可以抓取jsp文件底部到目前爲止寫入頁面的任何內容,如:servlet.getPrintWriter()。getContents()獲取所有內容至今? – user246114 2010-07-10 04:16:59