调试spring mvc视图渲染时间

时间:2013-09-25 11:14:53

标签: spring-mvc freemarker

我目前正在使用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);

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

你将在服务器端计算合并模板与数据,主要问题是当freemarker在页面上执行时,你知道freemarker建立在jsp页面之上所以你应该把代码带到jsp端来计算执行时间, 根据我在freemarker中的数据大小加载时间的经验是不同的。 如果其他条件也比jstl慢太慢! 我可以推荐使用springmeleaf for spring,它允许模板以非xml风格工作原型。