Thymeleaf模板性能測試

1 Beetl css

2 FreeMarker html

3 Thymeleaf 前端

對於這三種模板的介紹能夠在oschina上查看,對於前二者比較熟悉,對Thymeleaf是新的認識,Thymeleaf有一個地方本人很喜歡,模板頁面靜態或者動態打開能夠正常顯示,方便前端測試和後端分離開發,下面是對三者的性能測試。 java

經過 @閒.大賦 ,找到了測試工具TEB, http://git.oschina.net/kiang/teb @kiang git

__________________________________________________________________________________________________________________________ shell

發現Beetl和FreeMarker測試弄能代碼都已經實現,因而對Thymeleaf進行了添加, 這裏本人第一次用Thymeleaf因此不清楚對Thymeleaf配置是否對它性能產生了影響,下面直接代碼: 後端

package kiang.tei;

import kiang.teb.TebEngine;
import kiang.teb.TebModel;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.FileTemplateResolver;

import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @author eyeLee(yinjun622@163.com)
 *         Time 2014/11/1.
 */
public class Thymeleaf implements TebEngine {

    private TemplateEngine engine;

    @Override
    public TebEngine init(Properties properties) throws Exception {

        FileTemplateResolver templateResolver =  new FileTemplateResolver();
        templateResolver.setPrefix("./src/kiang/tpl/");
        templateResolver.setSuffix(".tpl");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setTemplateMode("XHTML");

        engine = new TemplateEngine();
        engine.setTemplateResolver(templateResolver);
        engine.initialize();
        return this;
    }

    @Override
    public void test(Map arguments, Writer writer) throws Exception {
        Context ctx = new Context();
        ctx.setVariables(arguments);
        engine.process("thymeleaf",  ctx, writer);
    }

    @Override
    public void test(Map arguments, OutputStream output) throws Exception {
    }

    @Override
    public void shut() throws Exception {

    }

    @Override
    public boolean isBinarySupport() {
        return false;
    }

    public static void main(String args[]) throws Exception {
        String source="UTF-8", target = "UTF-8";
        Writer writer = new OutputStreamWriter(System.out, target);
        Map data = new HashMap();
        data.put("target", target);
        data.put("models", TebModel.dummyModels(20));
        Properties properties = new Properties();
        properties.setProperty("source", source);
        properties.setProperty("target", target);
        properties.setProperty("binary", String.valueOf(true));
        TebEngine engine = new Thymeleaf().init(properties);
        engine.test(data, writer);
        writer.flush();
        engine.shut();
    }

}

頁面代碼: 併發

<html>
<head>
    <title>Thymeleaf!!!!!</title>
    <meta http-equiv="Content-Type" content="text/html;" th:charset="${target}"/>
    <style type="text/css">
        body { font-size: 10pt; color: #333333; }
        thead { font-weight: bold; background-color: #C8FBAF; }
        td { font-size: 10pt; text-align: center; }
        .odd { background-color: #F3DEFB; }
        .even { background-color: #EFFFF8; }
    </style>
</head>
<body>
    <h1>Template Engine Benchmark - Thymeleaf!!!!!</h1>
    <table>
        <thead>
            <tr>
                <th>序號</th>
                <th>編碼</th>
                <th>名稱</th>
                <th>日期</th>
                <th>值</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="model : ${models}" th:class="${modelStat.odd}? 'odd' : 'even'"  >
                <td th:text="${modelStat.index}"></td>
                <td th:text="${model.code}"></td>
                <td th:text="${model.name}"></td>
                <td th:text="${model.date}"></td>
                <td th:text="${model.value}"></td>
                <td th:if="${model.value} > 105.5" style="color: red" th:text="${model.value}+'%'"></td>
                <td th:unless="${model.value} > 105.5" style="color: blue" th:text="${model.value}+'%'"></td>
            </tr>
        </tbody>
    </table>
</body>
</html>

在TEB配置文件中添加Thymeleaf項: less

#Thymeleaf
thy.name=Thymeleaf 2.1.3
thy.site=http://thymeleaf.com
thy.test=kiang.tei.Thymeleaf

完整代碼地址:http://git.oschina.net/yinjun622/teb ide

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

測試結果:

TPS       : 引擎的吞吐量, 單位時間內引擎渲染次數, 單位: 次/秒
Time      : 引擎所有渲染的執行時間, 單位: 毫秒
OnceIo    : 引擎單次渲染的IO次數, 單位: 次
MassIo    : 引擎所有渲染的IO次數, 單位: 次
OnceOut   : 引擎單次渲染的輸出字節(字符)數, 單位: 字節/字符
MassOut   : 引擎所有渲染的輸出字節(字符)數, 單位: 字節/字符
PermMem   : 內存消耗, 內存取新生代以外的內存(新生代內存會被很快回收), 單位: 字節

經過測試結果發現,Thymeleaf與beetl不在一個數量級上,在併發和渲染時間上有巨大的差距

相關文章
相關標籤/搜索