我目前正在使用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视图渲染时我该怎么做?
答案 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风格工作原型。