Thymeleaf模板性能测试

1 Beetl

2 FreeMarker

3 Thymeleaf

对于这三种模板的介绍可以在oschina上查看,对于前两者比较熟悉,对Thymeleaf是新的认识,Thymeleaf有一个地方本人很喜欢,模板页面静态或者动态打开可以正常显示,方便前端测试和后端分离开发,下面是对三者的性能测试。

通过 @闲.大赋 ,找到了测试工具TEB, http://git.oschina.net/kiang/teb @kiang

__________________________________________________________________________________________________________________________

发现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([email protected])
 *         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项:

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

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

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

测试结果:


TPS       : 引擎的吞吐量, 单位时间内引擎渲染次数, 单位: 次/秒
Time      : 引擎全部渲染的执行时间, 单位: 毫秒
OnceIo    : 引擎单次渲染的IO次数, 单位: 次
MassIo    : 引擎全部渲染的IO次数, 单位: 次
OnceOut   : 引擎单次渲染的输出字节(字符)数, 单位: 字节/字符
MassOut   : 引擎全部渲染的输出字节(字符)数, 单位: 字节/字符
PermMem   : 内存消耗, 内存取新生代之外的内存(新生代内存会被很快回收), 单位: 字节

通过测试结果发现,Thymeleaf与beetl不在一个数量级上,在并发和渲染时间上有巨大的差距

时间: 2024-12-18 08:30:39

Thymeleaf模板性能测试的相关文章

Spring Boot入门——thymeleaf模板使用

使用步骤 1.在pom.xml中引入thymeleaf <!-- thymeleaf插件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>1.5.3.RELEASE</version> </dependen

在Spring MVC和Spring Boot中使用thymeleaf模板

Spring MVC: POM: <!-- thymeleaf模板 --> <!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf --> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <version>3.0.7.RELEA

Spring Boot学习记录(二)--thymeleaf模板

Spring Boot学习记录(二)–thymeleaf模板 标签(空格分隔): spring-boot 自从来公司后都没用过jsp当界面渲染了,因为前后端分离不是很好,反而模板引擎用的比较多,thymeleaf最大的优势后缀为html,就是只需要浏览器就可以展现页面了,还有就是thymeleaf可以很好的和spring集成.下面开始学习. 1.引入依赖 maven中直接引入 <dependency> <groupId>org.springframework.boot</gr

Thymeleaf模板引擎使用

Thymeleaf模板引擎使用 什么是Thymeleaf Thymeleaf是一个Java库.它是一个XML / XHTML / HTML5模板引擎,能够在模板文件上应用一组转换,将程序产生的数据或者文本显示到模板文件上. Thymeleaf依赖的jar包 要使用Thymeleaf,需要在我们的web应用的classpath路径中引入相关的jar,如下: thymeleaf-2.1.3.RELEASE.jarognl-3.0.6.jarjavassist-3.16.1-GA.jarunbesca

Thymeleaf模板引擎的初步使用

在springboot中,推荐使用的模板引擎是Thymeleaf模板引擎,它提供了完美的Spring MVC的支持.下面就简单的介绍一下Thymeleaf模板引擎的使用. 在controller层中,使用在类上使用@controller注解,注意的是,这里不是@restController注解,因为@restController注解是将结果作为json字符串进行返回的,并不是调用模板. 方法中,注入参数,Model model.然后同springmvc中的modelandview一样,model

Thymeleaf模板引擎+Spring整合使用方式的介绍

尊重原创,原文地址为:https://www.cnblogs.com/jiangchao226/p/5937458.html 前言 这个教程介绍了Thymeleaf与Spring框架的集成,特别是SpringMvc框架. 注意Thymeleaf支持同Spring框架的3.和4.版本的集成,但是这两个版本的支持是封装在thymeleaf-spring3和thymeleaf-spring4这两个独立的库中,项目中需要根据实际情况分别引用. 样例代码针对的是spring4.,但一般情况下,spring

spring boot Thymeleaf模板引擎 最简单输出例子

spring boot  Thymeleaf模板引擎  最简单输出例子 控制器代码如下: @GetMapping(value = "/test")public String test(Model model){ List<Boy> boy = new ArrayList<Boy>(); boy.add(new Boy("xx",11)); boy.add(new Boy("yy",22)); boy.add(new Boy

jdbcTemplate 和 Thymeleaf模板引擎 查询 到模板赋值例子

二.  jdbcTemplate 和 Thymeleaf模板引擎  最简单输出例子 控制器代码 @GetMapping(value = "/test2") public String test2(Model model){ sql = "SELECT * FROM boy "; List queryList = jdbcTemplate.queryForList(sql); model.addAttribute("boy", queryList)

SpringBoot入门篇--使用Thymeleaf模板引擎进行页面的渲染

在做WEB开发的时候,我们不可避免的就是在前端页面之间进行跳转,中间进行数据的查询等等操作.我们在使用SpringBoot之前包括我在内其实大部分都是用的是JSP页面,可以说使用的已经很熟悉.但是我们在使用springBoot开发框架以后我们会发现一个致命的问题,就是SpringBoot对Jsp的支持可以说是惨不忍睹,官方推荐我们进行使用的是Thymeleaf模板引擎进行.其实我这里也没搞清楚模板引擎原理是什么,以后有机会再深入了解,我们只需要学会怎么用就行,目前而言.当然模板引擎有很多,比如f