1

現在、Spring MVC 3.x を使用しており、freemarker ビュー リゾルバーを使用しています。

最近、ビューが html に変換されてから応答として返されるまでの実行時間について疑問に思っています。この領域で速度が遅い場合はチューニングを行いたいので、いくつかの数値が必要です。

プレーンなフリーマーカー モードでは、これらの間に単純な 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 ビュー レンダリングを使用する場合、どうすればよいですか?

4

2 に答える 2

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>
于 2013-09-25T12:49:09.293 に答える
0

サーバー側でテンプレートをデータとマージするだけで計算します.主な問題は、freemarkerがページで実行されている場合です.ご存知のように、freemarkerはjspページの上に構築されているため、jsp側にコードを持ってきて実行時間を計算する必要があります.私の経験によるとfreemarker でのデータサイズの読み込み時間は異なります。if else 条件も jstl に比べて遅すぎる! テンプレートがxmlスタイルではなくプロトタイプを機能させることを可能にする春のタイムリーフをお勧めします。

于 2013-09-25T12:56:56.263 に答える