2013-09-25 2 views
1

현재 스프링 MVC 3.x 인 을 사용 중이고 freemarker 뷰 리졸버를 사용 중입니다.디버그 스프링 mvc 뷰 렌더링 시간

최근보기가 응답으로 돌아 오기 전에 HTML로 변환하는 데 걸리는 실행 시간이 궁금합니다. 상황이이 분야에서 느린 경우 튜닝을하고 싶습니다. 그래서 몇 가지 번호가 필요한 것입니다.

long start = System.currentTimeMillis(); 
// this could be slow or fast depending on the caching used 
Template temp = cfg.getTemplate(ftlName); 
... 
temp.process(model, myWriter); // depends on the writer 
System.out.printf("done in %s ms", System.currentTimeMillis() - start); 

을하지만 난 때 스프링 MVC의 freemaker보기 렌더링이 작업을 수행 할 방법 : 일반 프리 마커 모드에서

, 내가 실제로 실행 시간을 찾으려면 다음의 간단한에 System.currentTimeMillis()를 할 수 있습니까?

답변

5

org.springframework.web.servlet.view.freemarker.FreeMarkerView를 확장하고 사용자 정의 로깅보기 구현으로 FreeMarkerViewResolver를 구성하는 것이 좋습니다.

로깅보기 구현은 다음과 같을 수 있습니다 :

public class LoggingFreeMarkerView extends FreeMarkerView { 

    private static final transient Log log = LogFactory.getLog(LoggingFreeMarkerView.class); 

    @Override 
    protected void doRender(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { 
     long start = System.currentTimeMillis(); 
     super.doRender(model, request, response); 
     log.debug("Freemarker rendered " + request.getRequestURI() + " in " + (System.currentTimeMillis() - start) + " ms"); 
    } 
} 

그리고 와이어 새로운 클래스와 뷰 리졸버 :

<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver" autowire="no"> 
     <property name="viewClass" value="com.example.LoggingFreeMarkerView" /> 
     <property name="cache" value="false" /> <!-- cache disabled for performance monitoring --> 
     <property name="prefix" value="" /> 
     <property name="suffix" value=".ftl" /> 
     <property name="contentType" value="text/html;charset=utf-8" /> 
     <property name="exposeRequestAttributes" value="true" /> 
     <property name="requestContextAttribute" value="base" /> 
    </bean> 
0

당신은 단지 데이터, 홈페이지와 서버 측 병합 템플릿을 계산하려고를 문제는 freemarker가 페이지에서 실행될 때입니다. freemarker가 JSP 페이지 상단에 내장되어 있으므로 JSP 시간에 코드를 가져와 실행 시간을 계산해야합니다. freemarker의 데이터 크기로드 시간에 따른 경험이 다릅니다. else 조건도 jstl과 비교해 너무 느리다면! 템플릿을 XML 스타일이 아닌 프로토 타입으로 사용할 수있게 해주는 봄용으로 thymeleaf를 추천 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 freemarker는 ** jsp 기술 위에 전혀 구현되지 않았습니다 **. 서블릿 컨테이너 외부에서 실행할 수 있습니다. – bertie

+0

또한 여기 http://forum.thymeleaf.org/Performance-issue-td3722763.html에서 평가 한 바에 따르면 freemarker는 최고 JSP로, jsp는 thymeleaf를 차지하는 것으로 보입니다. 그러나 내 웹 사이트가 데이터베이스 계층에서 병목 현상을 겪게 될 것이므로 실제로 속도는 중요하지 않습니다. 게다가 freemarker에서 전달할 수있는 함수와 매크로를 정말 좋아합니다. – bertie

+0

어떤 유형의 매크로를 만드시겠습니까? ui 매크로가 그러한 CSS를 변경하더라도 좋은 CSS를 변경해도 테스트 할 때마다 재배포해야하며 사용자 정의 태그 일지라도 jsp보다 훨씬 강력합니다. 예를 들어 그리드 시스템 정렬의 경우 데이터 크기에 따라 수학 매크로가 느려지는 경우 나쁘지 않다. –