调试spring mvc视图渲染时间

ber*_*tie 1 freemarker spring-mvc

我目前正在使用Spring MVC 3.x,并使用freemarker视图解析器.

最近我一直想知道在作为响应发送回来之前将视图翻译成html所需的执行时间.如果这方面的事情很慢,我想做调音,这就是为什么我需要一些数字.

在普通的freemarker模式下,我实际上可以在它们之间执行简单的System.currentTimeMillis()来找出执行时间:

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);
Run Code Online (Sandbox Code Playgroud)

但是,当使用spring mvc的freemaker视图渲染时,我该怎么做呢?

Kre*_*sek 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用新类连接视图解析器:

    <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>
Run Code Online (Sandbox Code Playgroud)