2013-09-25 93 views
1

我目前使用Spring MVC 3.x, 並使用freemarker視圖解析器。調試spring mvc查看渲染時間

最近我一直想知道執行時間,它需要一個視圖轉換爲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的視圖呈現什麼時候?

回答

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在頁面上執行時,正如你所知道的建立在jsp頁面上的freemarker,所以你應該帶代碼到jsp端來計算執行時間, 因爲我根據freemarker中數據大小加載時間的經驗是不同的。 if else條件也比jstl太慢! 我可以推薦thymeleaf for spring,它允許模板在沒有xml風格的情況下工作原型。

+0

感謝您抽出寶貴時間回覆,但freemarker根本不是建立在jsp技術之上的。它可以在servlet容器之外運行。 – bertie

+0

此外,基於評估http://forum.thymeleaf.org/Performance-issue-td3722763.html,Freemarker似乎頂級jsp,而jsp頂級百里香。但是用戶的速度並不是我真正關心的問題,因爲我的網站會在數據庫層出現瓶頸。此外,我真的很喜歡可以在freemarker中傳遞的函數和宏。 – bertie

+0

你想創建哪種類型的宏?即使ui宏這樣改變css也不錯,但是你應該重新部署每一次測試它,甚至自定義標記它比jsp更強大,或者如果數學宏根據數據大小減慢例如網格系統排序不好如此緩慢 –