2010-07-10 2 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로 print()하고 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

+0

이 질문은 애플 리케이션 엔진에 특정한 것이 아니라고 생각합니다. 더 많은 것입니다. 어떻게 JSP 페이지의 전체 내용을 문자열로 가져 옵니까? StringBuilder 접근 방식을 사용하여 수동으로 처리해야합니까, 아니면 문서 끝에 PrintWriter로 밀어 넣은 모든 것을 잡을 수있는 방법이 있습니까? – user246114

+0

나는 이미 다른 질문에서 대답했다. – BalusC

답변

0

말 목록이 필요하지 않고 페이지가 사용자별로 다르지 않은 경우 전체 페이지를 캐시하는 것이 더 빠릅니다. 그렇지 않으면 말 목록을 캐시하십시오.

말 목록을 캐시하려면 목록을 serialize하고 deserialize해야합니다. 또한 관심이없는 정보 (예 : 페이지에서 사용되지 않은 정보)를 캐시 할 수 있습니다. 반면에 HTML 페이지는 텍스트 일 ​​뿐이므로 직렬화/비 직렬화는 거의 불가능합니다.

+0

그래, HTML 캐싱을 선호합니다. StringBuilder 접근법을 사용하여 전체 페이지를 다시 작성해야합니까, 아니면 jsp 파일의 맨 아래에 페이지에 쓰여진 내용을 모두 포착 할 수 있습니까 : servlet.getPrintWriter(). getContents() 지금까지? – user246114

관련 문제